[PATCH v5 3/3] completion: add new zsh completion
- From
Felipe Contreras <felipe.contreras@gmail.com>
- Date
- Oct 14, 2012, 15:52 UTC
- Message-ID
- <1350229971-9343-4-git-send-email-felipe.contreras@gmail.com>
- In-Reply-To
- <1350229971-9343-1-git-send-email-felipe.contreras@gmail.com>
It seems there's always issues with zsh's bash completion emulation. I've tried to fix as many as I could and most of the fixes are already in the latest version of zsh, but still, there are issues.
There is no point in going through all that pain; the emulation is easy to achieve, and this patch works better than zsh's emulation.
Signed-off-by: Felipe Contreras <felipe.contreras@gmail.com> ---
v5:
* Even more simplification by using __gitcompadd
v4:
* Simplification updates for the latest bash completion
v3:
* Simplification * Avoid COMPREPLY; call compadd directly * Fix _get_comp_words_by_ref
contrib/completion/git-completion.zsh | 48 +++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 contrib/completion/git-completion.zsh
diff --git a/contrib/completion/git-completion.zsh b/contrib/completion/git-completion.zsh new file mode 100644 index 0000000..dbb5261 --- /dev/null +++ b/contrib/completion/git-completion.zsh @@ -0,0 +1,48 @@ +#compdef git gitk + +# zsh completion wrapper for git +# +# You need git's bash completion script installed somewhere, by default on the +# same directory as this script. +# +# If your script is on ~/.git-completion.sh instead, you can configure it on +# your ~/.zshrc: +# +# zstyle ':completion:*:*:git:*' script ~/.git-completion.sh +# +# The recommended way to install this script is to copy to +# '~/.zsh/completion/_git', and then add the following to your ~/.zshrc file: +# +# fpath=(~/.zsh/completion $fpath) + +complete () +{ + # do nothing + return 0 +} + +zstyle -s ":completion:*:*:git:*" script script +test -z "$script" && script="$(dirname ${funcsourcetrace[1]%:*})"/git-completion.bash +ZSH_VERSION='' . "$script" + +__gitcompadd () +{ + compadd -Q -S "$4" -P "$2" -p "${(M)cur#*[=:]}" -- ${=1} && _ret=0 +} + +_git () +{ + local _ret=1 + () { + emulate -L ksh + local cur cword prev + cur=${words[CURRENT-1]} + prev=${words[CURRENT-2]} + let cword=CURRENT-1 + __${service}_main + } + let _ret && _default -S '' && _ret=0 + return _ret +} + +_git
-- 1.7.12.1