Zsh Mailing List Archive
Messages sorted by:
Reverse Date,
Date,
Thread,
Author
Add matchspec for foo/bar branch names in git completion
- X-seq: zsh-users 20212
- From: Daniel Shahaf <d.s@xxxxxxxxxxxxxxxxxx>
- To: zsh-users@xxxxxxx
- Subject: Add matchspec for foo/bar branch names in git completion
- Date: Thu, 14 May 2015 14:37:47 +0000
- Dkim-signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d= daniel.shahaf.name; h=content-type:date:from:message-id :mime-version:subject:to:x-sasl-enc:x-sasl-enc; s=mesmtp; bh=TZG gVH4DOG50qPSpFLqR7JG8Wp0=; b=x8jM8+vTkmFWBupbjVM0qb/eWQIpfR4YsIc 3HnJw7N8nm5BMpScLeoQtq8D0gbqxQvP1RzlclpsHTRVCdAreQ0Wzu9UERNM6562 vJDON91wd+nM6/Nx9UiKIo8jy1hMYrM3Ook8540KKb1tlPTPeFakbB1ta3mYjmuM tegW0pBI=
- Dkim-signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d= messagingengine.com; h=content-type:date:from:message-id :mime-version:subject:to:x-sasl-enc:x-sasl-enc; s=smtpout; bh=TZ GgVH4DOG50qPSpFLqR7JG8Wp0=; b=PnIzaldkM3iTF7PiHiqyu22OQG6SYtusaL oM2KxOCc1d2vzIZGucgrbTJ4pEXgBjAwJppo1nzKTdjUzK1kJyoSVTwl7MAmoSn/ tBmRJOHjOACmQCsu2GgZJZ3nRilXJB6tTqVNyTLKdFyKesevmhx0u5nwx8J1idyP Wi7MSrOWk=
- 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
I'd like to add a matchspec to git heads completion, such that
'git checkout o/m<TAB>' would complete to 'origin/master'.
However, I can't seem to get the matchspec right. I tried this:
[[[
diff --git a/Completion/Unix/Command/_git b/Completion/Unix/Command/_git
index 9304fbb..fe03439 100644
--- a/Completion/Unix/Command/_git
+++ b/Completion/Unix/Command/_git
@@ -5585,7 +5585,7 @@ __git_remote_branch_names () {
branch_names=(${${(f)"$(_call_program remote-branch-refs git for-each-ref --format='"%(refname)"' refs/remotes 2>/dev/null)"}#refs/remotes/})
__git_command_successful $pipestatus || return 1
- _wanted remote-branch-names expl 'remote branch name' compadd "$@" -a - branch_names
+ _wanted remote-branch-names expl 'remote branch name' compadd -M 'r:|/=*' "$@" -a - branch_names
}
(( $+functions[__git_remote_branch_names_noprefix] )) ||
@@ -5596,7 +5596,7 @@ __git_remote_branch_names_noprefix () {
branch_names=(${${${(f)"$(_call_program remote-branch-refs-noprefix git for-each-ref --format='"%(refname)"' refs/remotes 2>/dev/null)"}##*/}:#HEAD})
__git_command_successful $pipestatus || return 1
- _wanted remote-branch-names-noprefix expl 'remote branch name' compadd "$@" -a - branch_names
+ _wanted remote-branch-names-noprefix expl 'remote branch name' compadd -M 'r:|/=*' "$@" -a - branch_names
}
(( $+functions[__git_commit_objects_prefer_recent] )) ||
@@ -5637,7 +5637,7 @@ __git_heads_local () {
[[ -f $gitdir/refs/stash ]] && heads+=stash
fi
- _wanted heads-local expl "local head" compadd "$@" -a - heads
+ _wanted heads-local expl "local head" compadd -M 'r:|/=*' "$@" -a - heads
}
(( $+functions[__git_heads_remote] )) ||
@@ -5647,7 +5647,7 @@ __git_heads_remote () {
heads=(${(f)"$(_call_program headrefs git for-each-ref --format='"%(refname:short)" refs/remotes' 2>/dev/null)"})
- _wanted heads-remote expl "remote head" compadd "$@" -a - heads
+ _wanted heads-remote expl "remote head" compadd -M 'r:|/=*' "$@" -a - heads
}
(( $+functions[__git_commit_objects] )) ||
]]]
Now, it does complete 'o/m' to 'origin/master', but when I type just
'or<TAB>', it completes to 'origin', without the trailing slash:
[[[
% git branch -l
foo/a
foo/b
foo/c
* master
% git co fo<TAB>
% git co foo
]]]
How could I get 'fo<TAB>' to become 'foo/', with the slash?
This is both in my usual config and in 'zsh -f'+compinit.
Cheers,
Daniel
Messages sorted by:
Reverse Date,
Date,
Thread,
Author