zsh-users
 help / color / mirror / code / Atom feed
From: "Benjamin R. Haskell" <zsh@benizi.com>
To: Conrad Irwin <conrad.irwin@gmail.com>
Cc: zsh-users@zsh.org
Subject: Re: _git Completion and custom commands
Date: Tue, 28 Sep 2010 00:06:32 -0400 (EDT)	[thread overview]
Message-ID: <alpine.LNX.2.01.1009272342180.30023@hp> (raw)
In-Reply-To: <AANLkTimE+8OYZXmpmdepsY-WkLjSkE+VB3hdQpBQ0p_c@mail.gmail.com>

[-- Attachment #1: Type: TEXT/PLAIN, Size: 1716 bytes --]

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.

  reply	other threads:[~2010-09-28  4:07 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-09-28  0:29 Conrad Irwin
2010-09-28  4:06 ` Benjamin R. Haskell [this message]
2010-09-28  5:28   ` Sebastian Stark
2010-09-28  6:30     ` Benjamin R. Haskell
2010-09-28  8:03   ` Frank Terbeck
2010-09-28 18:01     ` Conrad Irwin

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=alpine.LNX.2.01.1009272342180.30023@hp \
    --to=zsh@benizi.com \
    --cc=conrad.irwin@gmail.com \
    --cc=zsh-users@zsh.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.vuxu.org/mirror/zsh/

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).