I reproduced the bug and by using Marc's patch the bug it's fixed.
On Sat, Jul 26, 2014 at 6:16 PM, Marc Cornellà <[email protected]> wrote: > 2014-07-26 22:10 GMT+02:00 Jason A. Donenfeld <[email protected]>: > > Just expand into an array and use that. > > No need, I finally used the `${name:-word}' construct which provides a > default value > in case $name is not defined or empty. $name can also be a `$()' construct > [1] > > I tested with and without passwords, and it seems to work OK. Let's see > what > Santiago has to say. > > Cheers! > > [1] > http://zsh.sourceforge.net/Doc/Release/Expansion.html#Parameter-Expansion > ---- > From 54997d8197d685cb6ac6cffdc24ce59805cb04e5 Mon Sep 17 00:00:00 2001 > From: =?UTF-8?q?Marc=20Cornell=C3=A0?= <[email protected]> > Date: Sat, 26 Jul 2014 22:45:26 +0200 > Subject: [PATCH] Fix pass zsh completion and autoloading > > When autocompleting from `pass <TAB>', sometimes the following errors > appear: > > _values:compvalues:10: not enough arguments > find: `/home/user/.password-store': No such file or directory > _values:compvalues:10: not enough arguments > find: `/home/user/.password-store': No such file or directory > > The `_values' error happens when there is no password-store folder *or* > there are no passwords in pass; the `find' error only when there is no > password-store folder. > > We can trace it back to line 108, which contains the only `_values' > statement that is executed when we autocomplete from pass. We confirm > this by following the trail of execution, which is > > _pass -> _pass_cmd_show -> _pass_complete_entries -> > -> _pass_complete_entries_helper > > If we try running the command inside `$()' on line 104, we see that it > returns nothing and the output is blank. This means that `_values' only > receives 1 of its 2 mandatory parameters, therefore the above error is > triggered (not enough arguments). > > That is unless we don't have a password-store folder, in which case the > `find: [...] no such file or directory' error is *also* triggered. > > We solve the first error by supplying a default value of "" if the > command outputs nothing, using the zsh construct ${var:-else}. > > We solve the second error by redirecting the find command's stderr output > to /dev/null, so the error is effectively suppressed. > > * * * * > > This patch also fixes the first tab completion, which currently only > loads the completion function definition. > > We do this by adding a `_pass' statement at the end of the file, which > runs the `_pass' completion function after loading its definition. > This is the standard way an autoloaded function works; for other examples > look at zsh's official completion files. > --- > src/completion/pass.zsh-completion | 4 +++- > 1 file changed, 3 insertions(+), 1 deletion(-) > > diff --git a/src/completion/pass.zsh-completion > b/src/completion/pass.zsh-completion > index b658398..9bb3f97 100644 > --- a/src/completion/pass.zsh-completion > +++ b/src/completion/pass.zsh-completion > @@ -114,7 +114,7 @@ _pass_cmd_show () { > _pass_complete_entries_helper () { > local IFS=$'\n' > local prefix="${PASSWORD_STORE_DIR:-$HOME/.password-store}" > - _values -C 'passwords' $(find -L "$prefix" \( -name .git -o -name > .gpg-id \) -prune -o $@ -print | sed -e "s#${prefix}/\{0,1\}##" -e > 's#\.gpg##' | sort) > + _values -C 'passwords' ${$(find -L "$prefix" \( -name .git -o -name > .gpg-id \) -prune -o $@ -print 2>/dev/null | sed -e > "s#${prefix}/\{0,1\}##" -e 's#\.gpg##' | sort):-""} > } > > _pass_complete_entries_with_subdirs () { > @@ -130,3 +130,5 @@ _pass_complete_keys () { > # Extract names and email addresses from gpg --list-keys > _values 'gpg keys' $(gpg2 --list-secret-keys --with-colons | cut -d > : -f 10 | sort -u | sed '/^$/d') > } > + > +_pass > -- > 2.0.1 > > -- > Marc >
_______________________________________________ Password-Store mailing list [email protected] http://lists.zx2c4.com/mailman/listinfo/password-store
