Zsh Mailing List Archive
Messages sorted by:
Reverse Date,
Date,
Thread,
Author
Re: _git Completion and custom commands
- X-seq: zsh-users 15433
- From: "Benjamin R. Haskell" <zsh@xxxxxxxxxx>
- To: Conrad Irwin <conrad.irwin@xxxxxxxxx>
- Subject: Re: _git Completion and custom commands
- Date: Tue, 28 Sep 2010 00:06:32 -0400 (EDT)
- Cc: zsh-users@xxxxxxx
- In-reply-to: <AANLkTimE+8OYZXmpmdepsY-WkLjSkE+VB3hdQpBQ0p_c@xxxxxxxxxxxxxx>
- List-help: <mailto:zsh-users-help@zsh.org>
- List-id: Zsh Users List <zsh-users.zsh.org>
- List-post: <mailto:zsh-users@zsh.org>
- Mailing-list: contact zsh-users-help@xxxxxxx; run by ezmlm
- References: <AANLkTimE+8OYZXmpmdepsY-WkLjSkE+VB3hdQpBQ0p_c@xxxxxxxxxxxxxx>
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 ${(<Tab>
completes glob qualifiers rather than parameter expansion flags.
Messages sorted by:
Reverse Date,
Date,
Thread,
Author