It turns out 'words' is a special variable used by zsh completion, sort of like 'COMP_WORDS' in bash. This was not isolated correctly in zsh's bash completion, so by trying to set it as 'local' in git's completion, unexpected results occur; assignations are not propagated to upper 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 debian's bash_completion 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 Comments-by: SZEDER GÃbor <szeder@xxxxxxxxxx> Comments-by: Jonathan Nieder <jrnieder@xxxxxxxxx> Signed-off-by: Felipe Contreras <felipe.contreras@xxxxxxxxx> --- 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. 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 -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html