threads / discuss / 33040

zsh completion broken for file completion

Subject: zsh completion broken for file completion

## tl;dr

6 messages between Feb 28, 2013 and Apr 2, 2013.

replies: 5people: 5as markdown or json

Matthieu Moy· Feb 28, 2013, 18:43 UTC · lore
Hi,

The completion for e.g. "git add file<tab>" is broken in master. I get the following result:

git add fo__gitcomp_file:8: command not found: compgen

The guilty commit is fea16b47b60 (Fri Jan 11 19:48:43 2013, Manlio Perillo, git-completion.bash: add support for path completion), which introduces a new __gitcomp_file function that uses the bash builtin "compgen", without redefining the function in git-completion.zsh.

The following proof-of-concept patch seems to fix the problem for me (I basically copied the __gitcomp_nl function to __gitcomp_file and removed the '-S "${4- }"'). The bash version does "compopt -o filenames", I don't know what zsh equivalent is.

diff --git a/contrib/completion/git-completion.zsh b/contrib/completion/git-completion.zsh
index 4577502..0ba1dcf 100644
--- a/contrib/completion/git-completion.zsh
+++ b/contrib/completion/git-completion.zsh
@@ -60,6 +60,15 @@ __gitcomp_nl ()
        compadd -Q -S "${4- }" -p "${2-}" -- ${=1} && _ret=0
 }
 
+__gitcomp_file ()
+{
+       emulate -L zsh
+
+       local IFS=$'\n'
+       compset -P '*[=:]'
+       compadd -Q -p "${2-}" -- ${=1} && _ret=0
+}
+
 _git ()
 {
        local _ret=1

Felipe, you know ZSH completion much better than me. Could you turn this
into a real patch?

Thanks,
-- 
Matthieu Moy
http://www-verimag.imag.fr/~moy/
Manlio Perillo· Feb 28, 2013, 18:59 UTC · re: Matthieu Moy · lore

Re: zsh completion broken for file completion

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Il 28/02/2013 19:43, Matthieu Moy ha scritto:
Show 30 quoted lines
> Hi,
> 
> The completion for e.g. "git add file<tab>" is broken in master. I get
> the following result:
> 
> git add fo__gitcomp_file:8: command not found: compgen
> 
> The guilty commit is fea16b47b60 (Fri Jan 11 19:48:43 2013, Manlio
> Perillo, git-completion.bash: add support for path completion), which
> introduces a new __gitcomp_file function that uses the bash builtin
> "compgen", without redefining the function in git-completion.zsh.
> 
> [...] 
> diff --git a/contrib/completion/git-completion.zsh b/contrib/completion/git-completion.zsh
> index 4577502..0ba1dcf 100644
> --- a/contrib/completion/git-completion.zsh
> +++ b/contrib/completion/git-completion.zsh
> @@ -60,6 +60,15 @@ __gitcomp_nl ()
>         compadd -Q -S "${4- }" -p "${2-}" -- ${=1} && _ret=0
>  }
>  
> +__gitcomp_file ()
> +{
> +       emulate -L zsh
> +
> +       local IFS=$'\n'
> +       compset -P '*[=:]'
> +       compadd -Q -p "${2-}" -- ${=1} && _ret=0
> +}
> +

This patch is implemented in fea16b47b60, but only for the deprecated zsh compatibility code inside git-completion.bash.

The reason I did not provided a patch for git-completion.zsh was because there was a bug in this script [1].

If any changes are made to git-completion.zsh, please update git-completion.bash, too.

[1] Basically, on my system I need the following change at the end of
    the file:
	-_git
	+autoload -U +X compinit && compinit
	+compdef _git git gitk
    I don't know the reason, however; and it seems that it is a problem
    only for me
> [...]
Regards  Malio
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.10 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/

iEYEARECAAYFAlEvqRUACgkQscQJ24LbaURASgCeILUTXAiZA6Ndf2DHByJfv4nT 2bMAn1gPqSdfIBzb0cexwYNoAuD5j2+O =sKTR -----END PGP SIGNATURE-----

Felipe Contreras· Apr 1, 2013, 09:30 UTC · re: Manlio Perillo · lore

Re: zsh completion broken for file completion

On Thu, Feb 28, 2013 at 12:59 PM, Manlio Perillo <manlio.perillo@gmail.com> wrote:

Show 10 quoted lines
>
> [1] Basically, on my system I need the following change at the end of
>     the file:
>
>         -_git
>         +autoload -U +X compinit && compinit
>         +compdef _git git gitk
>
>     I don't know the reason, however; and it seems that it is a problem
>     only for me

Are you sourcing this script? If so, don't; do what is suggested at the top: use fpath to load it automatically.

Cheers.

-- Felipe Contreras

Matthieu Moy· Mar 5, 2013, 08:43 UTC · re: Matthieu Moy · lore

[PATCH] git-completion.zsh: define __gitcomp_file compatibility function

Commit fea16b47b60 (Fri Jan 11 19:48:43 2013, Manlio Perillo, git-completion.bash: add support for path completion), introduced a new __gitcomp_file function that uses the bash builtin "compgen". The function was redefined for ZSH in the deprecated section of git-completion.bash, but not in the new git-completion.zsh script.

As a result, users of git-completion.zsh trying to complete "git add fo<tab>" get an error:

git add fo__gitcomp_file:8: command not found: compgen
This patch adds the redefinition and removes the error.
Signed-off-by: Matthieu Moy <Matthieu.Moy@imag.fr>
---
> Felipe, you know ZSH completion much better than me. Could you turn this
> into a real patch?

No response from Felipe, so I'm trying my own patch. Compared to the snippet I already sent, I added the -f option to "compadd", which was there in the __gitcomp_file function defined in the deprecated ZSH compatibility section of the bash script, and gives the ZSH equivalent for "compopt -o filenames".

This fixes an annoying regression for ZSH users, so it may deserve to be in the future 1.8.2.

 contrib/completion/git-completion.zsh | 9 +++++++++
 1 file changed, 9 insertions(+)
diff --git a/contrib/completion/git-completion.zsh b/contrib/completion/git-completion.zsh
index 4577502..cf8116d 100644
--- a/contrib/completion/git-completion.zsh
+++ b/contrib/completion/git-completion.zsh
@@ -60,6 +60,15 @@ __gitcomp_nl ()
 	compadd -Q -S "${4- }" -p "${2-}" -- ${=1} && _ret=0
 }
 
+__gitcomp_file ()
+{
+	emulate -L zsh
+
+	local IFS=$'\n'
+	compset -P '*[=:]'
+	compadd -Q -p "${2-}" -f -- ${=1} && _ret=0
+}
+
 _git ()
 {
 	local _ret=1
-- 
1.8.1.3.572.g35e1b60
Junio C Hamano· Mar 5, 2013, 16:54 UTC · re: Matthieu Moy · lore

Re: [PATCH] git-completion.zsh: define __gitcomp_file compatibility function

Matthieu Moy <Matthieu.Moy@imag.fr> writes:
Show 26 quoted lines
> Commit fea16b47b60 (Fri Jan 11 19:48:43 2013, Manlio Perillo,
> git-completion.bash: add support for path completion), introduced a new
> __gitcomp_file function that uses the bash builtin "compgen". The
> function was redefined for ZSH in the deprecated section of
> git-completion.bash, but not in the new git-completion.zsh script.
>
> As a result, users of git-completion.zsh trying to complete "git add
> fo<tab>" get an error:
>
> git add fo__gitcomp_file:8: command not found: compgen
>
> This patch adds the redefinition and removes the error.
>
> Signed-off-by: Matthieu Moy <Matthieu.Moy@imag.fr>
> ---
>> Felipe, you know ZSH completion much better than me. Could you turn this
>> into a real patch?
>
> No response from Felipe, so I'm trying my own patch. Compared to the
> snippet I already sent, I added the -f option to "compadd", which was
> there in the __gitcomp_file function defined in the deprecated ZSH
> compatibility section of the bash script, and gives the ZSH equivalent
> for "compopt -o filenames".
>
> This fixes an annoying regression for ZSH users, so it may deserve to
> be in the future 1.8.2.
Thanks, and I agree a fix to this issue should be fast-tracked.
Show 24 quoted lines
>
>  contrib/completion/git-completion.zsh | 9 +++++++++
>  1 file changed, 9 insertions(+)
>
> diff --git a/contrib/completion/git-completion.zsh b/contrib/completion/git-completion.zsh
> index 4577502..cf8116d 100644
> --- a/contrib/completion/git-completion.zsh
> +++ b/contrib/completion/git-completion.zsh
> @@ -60,6 +60,15 @@ __gitcomp_nl ()
>  	compadd -Q -S "${4- }" -p "${2-}" -- ${=1} && _ret=0
>  }
>  
> +__gitcomp_file ()
> +{
> +	emulate -L zsh
> +
> +	local IFS=$'\n'
> +	compset -P '*[=:]'
> +	compadd -Q -p "${2-}" -f -- ${=1} && _ret=0
> +}
> +
>  _git ()
>  {
>  	local _ret=1
Manlio Perillo· Apr 2, 2013, 12:47 UTC · lore

Re: zsh completion broken for file completion

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Il 01/04/2013 11:29, Felipe Contreras ha scritto:
Show 20 quoted lines
> 
> 
> On Thu, Feb 28, 2013 at 12:59 PM, Manlio Perillo
> <manlio.perillo@gmail.com <mailto:manlio.perillo@gmail.com>> wrote:
> 
> 
>     [1] Basically, on my system I need the following change at the end of
>         the file:
> 
>             -_git
>             +autoload -U +X compinit && compinit
>             +compdef _git git gitk
> 
>         I don't know the reason, however; and it seems that it is a problem
>         only for me
> 
> 
> Are you sourcing this script? If so, don't; do what is suggested at the
> top: use fpath to load it automatically.
> 
I'm using fpath as documented.

However I tested the script again, and now seems to work correctly. It is possible that in the past I was using an incorrect configuration.

Thanks   Manlio Perillo
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.10 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/

iEYEARECAAYFAlFa01IACgkQscQJ24LbaUQOmACghDC30GqXXPIExHOPl9HrrO1y BYgAn2QPAYvtsSAAiPpgMnmMRI3z0LE8 =kmm0 -----END PGP SIGNATURE-----

← back to recent threads