From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 24643 invoked by alias); 28 Sep 2010 06:31:09 -0000 Mailing-List: contact zsh-users-help@zsh.org; run by ezmlm Precedence: bulk X-No-Archive: yes List-Id: Zsh Users List List-Post: List-Help: X-Seq: 15435 Received: (qmail 12361 invoked from network); 28 Sep 2010 06:31:07 -0000 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on f.primenet.com.au X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.3.1 Received-SPF: pass (ns1.primenet.com.au: SPF record at benizi.com designates 64.130.10.15 as permitted sender) Date: Tue, 28 Sep 2010 02:30:38 -0400 (EDT) From: "Benjamin R. Haskell" To: Sebastian Stark cc: Conrad Irwin , zsh-users@zsh.org Subject: Re: _git Completion and custom commands In-Reply-To: Message-ID: References: User-Agent: Alpine 2.01 (LNX 1266 2009-07-14) MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII; format=flowed 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-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-} ). > > All this is just because then you can type "git bu" instead of > "git-bu"? 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 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 produces lots of output, but ends with my custom commands all grouped at the end. -- Best, Ben