[pass] [PATCH] Fix pass completion syntax and autoloading

Santiago Borrazás sanbor at gmail.com
Mon Jul 28 01:05:53 CEST 2014


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à <marc.cornella at live.com>
wrote:

> 2014-07-26 22:10 GMT+02:00 Jason A. Donenfeld <Jason at zx2c4.com>:
> > 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?= <marc.cornella at live.com>
> 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
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.zx2c4.com/pipermail/password-store/attachments/20140727/bae838e5/attachment.html>


More information about the Password-Store mailing list