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

Re: compctl -Tx 'w[0,...] ...' ...

"Bart Schaefer" wrote:

> What's the difference between
> 	compctl ... -- foo
> and
> 	compctl -Tx 'w[0,foo]' ...
> ??  Aside from the obvious fact that you can use multiple `compctl ...`
> commands but only one `compctl -Tx ...`.
> Take a look at this:
> ...
> The above turns every compctl that doesn't use -x (because -x completions
> can't be nested) into a single huge compctl -T.  (It could probably be
> cleaned up a lot, especially the `stuff' loop for unfolding compctls that
> happen to have embedded newlines e.g. in -k '(...)' lists.)
> With some finagling, it ought to be possible to rewrite all the compctls
> that use -x in a similar manner, eventually reducing the entire collection
> of compctls (except for -C and -D) to one `compctl -T`.
> Now you may be wondering, what's the point of all this?  Well, at first it
> was just a desire to have something like compctl -T but that kicked in only
> after everything else failed.  (You can almost get this with -D, but only
> for commands that don't already have some other completion.)

Hm, using flags before a `-x' or `+' with no flags following it
(continue with default completion) aren't enough? Could I get an
example, please?

> Beyond that,
> though, it suggests that there may be a lot of redundant functionality in
> the completion code, which could without much effort be folded together.

Not that much, only the following lines could be removed:

       else if (linredir ||
                !(cmd &&
                  (((ccp = (Compctlp) compctltab->getnode(compctltab, cmd)) &&
                    (compc = ret = ccp->cc)) ||
                   ((s = dupstring(cmd)) && remlpaths(&s) &&
                    (ccp = (Compctlp) compctltab->getnode(compctltab, s)) &&
                    (compc = ret = ccp->cc)))))

And doing it that way should be faster than the all in one `-T' version.

But I admit that I didn't think of using `-T' with `w[0,...]'...

> Also, if you convert all your compctls to one big -T like that, then you
> can replace 'w[0,string]' with 'W[0,pattern]' and get an effect that a few
> persistent zsh-users have been requesting for some years: pattern matching
> on the command name when defining a completion.

Huh? That wouldn't be that difficult to implement (I think) and I
don't remember a request for it...


Sven Wischnowsky                         wischnow@xxxxxxxxxxxxxxxxxxxxxxx

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