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

Re: [PATCH] Add API wrapper to ${+_comps[...]}

Bart Schaefer wrote on Sat, Oct 03, 2015 at 17:49:19 -0700:
> On Sep 30,  6:29pm, Daniel Shahaf wrote:
> } 
> } I wonder if this is useful enough to be added?
> (Why two separate patches both to compsys.yo?)

One logical change per commit.  I might have erred on the side of
splitting too much, but it's easier to unsplit than to split.)

> I don't see any particular reason not to add it, but I also find
> no existence tests of $_comps[...] anywhere in the contributed
> functions or my own local startup files or functions, so it may
> indeed be only minimally useful.

I use them like this in my .zshrc:

    # TODO neither of this actually works, since _gnu_generic wants
    # --foo=[VALUE] and these have a space instead, but they get 90%
    # right and are better than nothing...
    _has_completion() { (( $# == 1 )) || return 2; (( $+_comps[$1] )) }
    _has_completion howdoi || compdef _gnu_generic howdoi
    _has_completion ag || compdef _gnu_generic ag

The idea is to be forward compatible — to only install the _gnu_generic
definition if there isn't an _ag already defined.

> On the other hand there are tests for whether a particular function
> is defined.  If that function is destined to be assigned to _comps[x]
> perhaps it would be better to check for _comps[x] already defined
> instead.

_comps[x] being already defined in what sense?  I can think of three
meanings: (a) hash key exists; (b) hash key exists and the value has
exists as a key in $functions; (c) same, plus the function is not
a "marked-for-autoload" stub.

The patch implements (a).  I think we could leave the patch doing (a)
— that's meaningful, it checks whether 'x <TAB>' has been hooked — and
let callers that care about (b) or (c) implement the extra check (b)
or (c) do it themselves?

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