On Tue, 28 Sep 2010, Conrad Irwin wrote: > Hi Zsh, > > I finally got round to trying out zsh today, and wow is it cool — I > don't believe I've been stuck on bash for all this time :). > > 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). > > (For those of you unfamiliar with git, any executable in your path > with a name like git-* can be called as git * with no hyphen) > > 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) 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-zsh 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-} ). -- Best, Ben P.S. Played around a bit with (k), and [(MIRK)*], but couldn't seem to find a way to not repeat the 'git-' pattern. I'm sure a veteran could do it effortlessly. P.P.S. I found it a bit odd that: print -l ${( completes glob qualifiers rather than parameter expansion flags.