[pass] [PATCH] Fix pass zsh completion and autoloading
Marc Cornellà
marc.cornella at live.com
Mon Jul 28 08:11:18 CEST 2014
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
More information about the Password-Store
mailing list