[PATCH v4] completion: add new zsh completion
From: Felipe Contreras <hidden>
Date: 2016-06-15 22:54:00
Subsystem:
the rest · Maintainer:
Linus Torvalds
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 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 <redacted> --- 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 | 68 +++++++++++++++++++++++++++++++++ 1 file changed, 68 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..07fa5a4
--- /dev/null
+++ b/contrib/completion/git-completion.zsh@@ -0,0 +1,68 @@ +#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 "$3" -P "$2" -p "${(M)cur#*[=:]}" -- ${=1} && _ret=0 +} + +__gitcomp () +{ + local cur_="${3-$cur}" + + case "$cur_" in + --*=) + ;; + *) + local IFS=$'\n' + __gitcompadd "$(__gitcomp_1 "${1-}")" "${2-}" "" + ;; + esac +} + +__gitcomp_nl () +{ + local IFS=$'\n' + __gitcompadd "$1" "${2-}" "${4- }" +} + +_git () +{ + local _ret=1 + () { + emulate -L ksh + local cur cword prev + cur=${words[CURRENT-1]} + prev=${words[CURRENT-2]} + let cword=CURRENT-1 + _main_${service} + } + let _ret && _default -S '' && _ret=0 + return _ret +} + +_git
--
1.7.10.3