From: SZEDER Gábor Date: Thu, 05 May 2011 18:59:07 GMT Subject: Re: [PATCH for maint branch] git-completion: fix zsh support Message-ID: <20110505185907.GD1377@goldbirke> In-Reply-To: <1304605458-1483-1-git-send-email-felipe.contreras@gmail.com> Hi, On Thu, May 05, 2011 at 05:24:18PM +0300, Felipe Contreras wrote: > It turns out 'words' is a special variable used by zsh completion. > > There's probably a bug in zsh's bashcompinit: > http://article.gmane.org/gmane.comp.shells.zsh.devel/22546 > > But in the meantime we can workaround it this way. I would prefer some details about this "workaround it this way" in the commit message (i.e. that you used "typedef -h", what it does in zsh, and why it fixes the issue; my zsh-fu is, well, not particularly large, so I have no idea), so when someone later runs 'git log -- contrib/completion' then he will easier understand what's going on without the need to look at the patch. > Currently zsh is completely broken after commit da48616 (bash: get > --pretty=m 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. > > Signed-off-by: Felipe Contreras > --- > contrib/completion/git-completion.bash | 3 +++ > 1 files changed, 3 insertions(+), 0 deletions(-) > > This patch is meant for the maintenance branch, so Szeder's patches are not > needed. My first two patches are cleanups, they definitely worth keeping, even when this patch alone would fix the zsh issues. > diff --git a/contrib/completion/git-completion.bash b/contrib/completion/git-completion.bash > index 840ae38..8d5eae7 100755 > --- a/contrib/completion/git-completion.bash > +++ b/contrib/completion/git-completion.bash > @@ -2710,6 +2710,9 @@ _git () > if [[ -n ${ZSH_VERSION-} ]]; then > emulate -L bash > setopt KSH_TYPESET > + > + # 'words' has special meaning in zsh; override that > + typeset -h words You have to do the same in _gitk(), too. Although _gitk() itself doesn't use $words, it invokes __git_has_doubledash(), which does, hence it's still broken. > fi > > local cur words cword > -- > 1.7.5.1.1.g638e6 >