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

Re: _git Completion and custom commands

On Tue, 28 Sep 2010, Sebastian Stark wrote:

Am 28.09.2010 um 06:06 schrieb Benjamin R. Haskell:
My question is then: how would I add my custom commands' names to the list already completed by _git (without completely overriding or modifying the system-wide configuration)?

This has bothered me for a while, too. I think _git should include these by default. But, it's pretty easy to add:

zstyle ':completion:*:git:*' user-commands ${${(k)commands[(I)git-*]}#git-}

(I've found _git to be very about what it allows you to override via zstyles)

                              ^ (very good about)

Explanation of the '${${(k)commands[(I)git-*]}#git-}' portion:

$commands is a built-in associative array that maps basenames to their full paths.

E.g. one of my custom git- commands that it picks up is:

So, we're looking for the keys '(k)'. And we only want entries in the hash that have (I)ndexes matching 'git-*'. Then we want to remove the leading 'git-' portion ( ${...#git-} ).

All this is just because then you can type "git bu<TAB>" instead of "git-bu<TAB>"?

Roughly, yes. But "all this" is really just adding a line to a startup file. The rest was just over-explanation (since the OP mentioned just switching from bash).

Or is there more to it? Perhaps I do not understand.

If you started learning git before all the git-cmd -style commands were no longer in path, maybe that git-bu<tab> seems natural, but I don't like that style at all. And personally, typing 'git ' is becoming so common I may alias it to 'g '.

The other portion not mentioned is that commands thus added show up in the normal list:

git <tab>

produces lots of output, but ends with my custom commands all grouped at the end.


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