Zsh Mailing List Archive
Messages sorted by: Reverse Date, Date, Thread, Author

Re: Proposal: Let compinit make standard widgets with _generic instead of _main_complete



On 4 Apr, Bart Schaefer wrote:
> On Mon, Mar 22, 2021 at 12:17 AM Marlon Richert
> > > +if [[ "${curcontext:-:::}" == ::: ]] &&
> > > +   zstyle -t ":completion:::::" generic-widgets "$WIDGET"
> > > +then
> > > +    _generic "$@"
> > > +    return
> > > +fi
> >
> > This feels like a rather roundabout solution. _generic itself already

That does indeed seem rather roundabout. And all it achieves is a
different way to configure what can already be configured.

> > checks whether $curcontext is set and then calls _main_complete. Why
> > not just do the straightforward thing, and let the widget call
> > _generic directly, which in turn will call _main_complete anyway?
>
> This is really only the first in a few steps of patch that I didn't
> want to spend time on if this were rejected out of hand.
> The problem with calling _generic at all (right now) is that it messes
> with $curcontext in a way that may break other functions that rely on
> _main_complete behavior.  If we can invert the call sequence so
> _main_complete remains first, then _generic itself can be tweaked so
> that it does NOT mung the context in that circumstance, while still
> leaving the original semantics of creating a new widget with _generic
> unchanged.

The only thing _generic really does is shove $WIDGET into the second
field of $curcontext where _main_complete left this empty. I wouldn't
know why it was empty by default other than perhaps brevity. But it does
provide for a notion of a default behaviour for the tab key and widgets
like _complete_debug that want to follow that default. Certainly, I have
quite a few styles defined with the two consecutive colons hardcoded. I
can't see how we can change it in a backward compatible way even if we
determine that it would be better.

The intended way to do this is to use zle -C to define a custom widget
based on an existing one and _generic. And if you really want the
existing widget, zstyle -e allows you to check $WIDGET. Or is the aim
here actually something else like making it easier for a plugin to base
changes on underlying user settings.

Oliver




Messages sorted by: Reverse Date, Date, Thread, Author