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

Re: _git Completion and custom commands

Benjamin R. Haskell <zsh@xxxxxxxxxx>:
>> The one issue I've found is that the _git completion function (as of  
>> 4.3.10 shipped with Debian testing) does not include custom commands  
>> (though it does include aliases).
> zstyle ':completion:*:git:*' user-commands ${${(k)commands[(I)git-*]}#git-}

Yes, this is explained at the top of the _git completion file.

Here's a little more:

The basic idea is that you can list your own git commands in the
`user-commands' style. And generally you're allowed to provide a
description for each command, too. So, say you've got a program
`git-foo', you can do this:

% zstyle ':completion:*:*:git:*' user-commands \
                     foo:'solves the question about the universe'

Now completing `git fo<tab>' results in a menu such as this (depending
on how compsys is configured, of course):

% % git fo<tab>
- git command -
foo           -- solves the question about the universe
for-each-ref  -- output information on each ref
format-patch  -- prepare patches for e-mail submission

Now, if you want smartness, when you try `git foo <tab>' you may
write a function `_git-foo()' and _git will pick it up. So, if
your `git-foo' program supports a few options (-f, -v and -q), a
completion function may look like this:

function _git-foo() {
    _arguments \
        '-f[force stuff]' \
        '-v[be verbose]'  \
        '-q[be quiet]'    && ret=0;

With this, typing `git foo -<tab>' results in this menu:

% git foo -<tab>
- option -
-f            -- force stuff
-q            -- be quiet
-v            -- be verbose

This can become as complicated as you like. :)

The `style' line Benjamin gave sets the `user-commands' style to a
list of all `git-*' commands zsh finds in $PATH. It's useful if you
got a *lot* of own scripts. Since zsh cannot guess a description for
the programs this way, commands added like that will be missing

Regards, Frank

PS: If the OP didn't configure compsys yet, then
    <http://zshwiki.org/home/examples/compquickstart> may serve him
    as a quickstart. I'll certainly help to get menus such as the
    ones I mentioned above.

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