• Marc Cornellà's avatar
    Fix pass zsh completion and autoloading · 142a6c7f
    Marc Cornellà authored
    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.
    142a6c7f
Name
Last commit
Last update
custom Loading commit data...
lib Loading commit data...
log Loading commit data...
plugins Loading commit data...
templates Loading commit data...
themes Loading commit data...
tools Loading commit data...
.gitignore Loading commit data...
MIT-LICENSE.txt Loading commit data...
README.textile Loading commit data...
oh-my-zsh.sh Loading commit data...