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: commands[git-build-zsh]=/home/bhaskell/bin/git-build-zshSo, 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.
-- Best, Ben