<div dir="ltr">I reproduced the bug and by using Marc's patch the bug it's fixed.</div><div class="gmail_extra"><br><br><div class="gmail_quote">On Sat, Jul 26, 2014 at 6:16 PM, Marc Cornellà <span dir="ltr"><<a href="mailto:marc.cornella@live.com" target="_blank">marc.cornella@live.com</a>></span> wrote:<br>

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