[PATCH v4 (for maint)] git-completion: fix zsh support
- From
Felipe Contreras <felipe.contreras@gmail.com>
- Date
- May 9, 2011, 22:14 UTC
- Message-ID
- <1304979299-6496-1-git-send-email-felipe.contreras@gmail.com>
- In-Reply-To
- <BANLkTikkhryMa69DSx4EAYjw+aar4icKcQ@mail.gmail.com>
It turns out 'words' is a special variable used by zsh completion. This was not isolated correctly in zsh's bash completion emulation, so by trying to set it as 'local' in git's completion, unexpected results occur; assignations are not propagated to outer levels in the call stack.
This is now fixed in the latest master branch of zsh[1] by simply defining 'words' as hidden (typeset -h), which removes the special meaning inside the emulated bash function. It probably won't be released until version 4.3.12.
In the meantime, we can workaround the issue by doing the same; defining words as hidden (typeset -h) as soon as possible.
Right now zsh is completely broken after commit da48616 (bash: get --pretty=m<tab> completion to work with bash v4), which introduced _get_comp_words_by_ref() that comes from bash-completion[2] scripts, and relies on the 'words' variable to behave like any normal variable.
[1] http://zsh.git.sourceforge.net/git/gitweb.cgi?p=zsh/zsh;a=commitdiff;h=e880604f029088f32fb1ecc39213d720ae526aaa [2] http://bash-completion.alioth.debian.org/
Comments-by: SZEDER Gábor <szeder@ira.uka.de> Comments-by: Jonathan Nieder <jrnieder@gmail.com> Signed-off-by: Felipe Contreras <felipe.contreras@gmail.com> --- contrib/completion/git-completion.bash | 8 ++++++++ 1 files changed, 8 insertions(+), 0 deletions(-)
This patch is meant for the maintenance branch, so Szeder's patches are not required.
v2: fix _gitk() too as Szeder suggested.
v3: improve commit message as Jonathan Nieder suggested.
Also, improve comments.v4: more commit message improvements
diff --git a/contrib/completion/git-completion.bash b/contrib/completion/git-completion.bash index 840ae38..763f145 100755 --- a/contrib/completion/git-completion.bash +++ b/contrib/completion/git-completion.bash @@ -2710,6 +2710,10 @@ _git () if [[ -n ${ZSH_VERSION-} ]]; then emulate -L bash setopt KSH_TYPESET + + # workaround zsh's bashinit's bug that leaves 'words' as a + # special variable in versions < 4.3.12 + typeset -h words fi local cur words cword @@ -2761,6 +2765,10 @@ _gitk () if [[ -n ${ZSH_VERSION-} ]]; then emulate -L bash setopt KSH_TYPESET + + # workaround zsh's bashinit's bug that leaves 'words' as a + # special variable in versions < 4.3.12 + typeset -h words fi __git_has_doubledash && return
-- 1.7.5.1.1.g638e6