zsh completion: enhance store navigation

Wouter info at lsof.nl
Mon Jul 9 14:29:43 CEST 2018


Hi Igor - and list,

Here's a new (properly formatted) patch. The parameter name is now 
'non-recursive-completion' which is slightly more descriptive and also 
more compliant with zsh.

If there are no objections, I'd like to request this change being added 
to mainstream.

=====
diff --git a/src/completion/pass.zsh-completion 
b/src/completion/pass.zsh-completion
index 27ce15a..5af97df 100644
--- a/src/completion/pass.zsh-completion
+++ b/src/completion/pass.zsh-completion
@@ -17,6 +17,11 @@
  #   PASSWORD_STORE_DIR=$HOME/work/pass pass $@
  # }

+# By default, completed 'directories' within the store will not have a 
trailing
+# slash. Furthermore, the offered items will be looked up recursively.
+# To change this, set the 'non-recursive-completion' flag to true as 
follows:
+# `zstyle ':completion:*:*:pass:*' non-recursive-completion true`.
+

  _pass () {
      local cmd
@@ -124,7 +129,12 @@ _pass_complete_entries_helper () {
      local IFS=$'\n'
      local prefix
      zstyle -s ":completion:${curcontext}:" prefix prefix || 
prefix="${PASSWORD_STORE_DIR:-$HOME/.password-store}"
-    _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##' -e 's#\\#\\\\#' | sort):-""}
+    zstyle -t ':completion:*:*:pass:*' non-recursive-completion
+    if [ $? -eq 0 ]; then
+        _files -W $prefix -g '*.gpg(:r)'
+    else
+        _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##' -e 's#\\#\\\\#' | sort):-""}
+    fi
  }

  _pass_complete_entries_with_subdirs () {
=====

Best regards,
Wouter


Op 04-07-18 om 16:11 schreef yanchenko.igor at gmail.com:
> Hi Wouter,
>
> I just managed to test your patch, it works as a charm for me, I would 
> ask to include it to mainstream, if there no other suggestion the 
> option name.
>
> Thank you.
>
> On Tue, Jul 3, 2018 at 11:05 PM Wouter <info at lsof.nl 
> <mailto:info at lsof.nl>> wrote:
>
>     I see, so what do you think about my patch? If the flag had a
>     better name that is...
>
>     I do not really like how one flag causes two changes in behaviour,
>     but if the name reflects that (e.g. 'alternative_completion') it
>     might be okay.
>
>
>     Op 03-07-18 om 22:24 schreef yanchenko.igor at gmail.com
>     <mailto:yanchenko.igor at gmail.com>:
>>     I wanted to make a solution that I can manage by flags, not by
>>     having a separate _pass file, that's what I mean by elegant
>>     solution.
>>
>>     On Tue 3 Jul 2018, 22:20 Wouter, <info at lsof.nl
>>     <mailto:info at lsof.nl>> wrote:
>>
>>         Op 03-07-18 om 15:57 schreef yanchenko.igor at gmail.com
>>         <mailto:yanchenko.igor at gmail.com>:
>>         > Hi Wouter,
>>         > I also prefer that behavior, I made a copy of _pass and did
>>         this change:
>>         >
>>         > 127c127
>>         > <       _files -W $prefix -g '*.gpg(:r)'
>>         > ---
>>         > >       _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##' -e 's#\\#\\\\#' |
>>         sort):-""}
>>         >
>>         > I didn't find more elegant solution.
>>         Hi Igor,
>>
>>         Thank you, I actually like it. It's a rather clean solution
>>         isn't it?
>>
>>         I'd like to make it optional through zstyle so it can be
>>         enabled without
>>         breaking current behaviour. Maybe eventually it could then be
>>         committed
>>         to the repo. Something along the lines of this (although I
>>         had no
>>         inspiration for a proper flag name):
>>
>>         19a20,24
>>          > # By default, completed 'directories' within the store
>>         will not have
>>         a trailing
>>          > # slash. Furthermore, the offered items will be looked up
>>         recursively. To change
>>          > # this, set the 'no_recurse' flag to true as follows:
>>          > # `zstyle ':completion:*:*:pass:*' no_recurse true`.
>>          >
>>         127c132,137
>>         <     _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##' -e 's#\\#\\\\#' |
>>         sort):-""}
>>         ---
>>          >     zstyle -t ':completion:*:*:pass:*' no_recurse
>>          >     if [ $? -eq 0 ]; then
>>          >         _files -W $prefix -g '*.gpg(:r)'
>>          >     else
>>          >         _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##' -e 's#\\#\\\\#' |
>>         sort):-""}
>>          >     fi
>>
>>         Best regards,
>>         Wouter
>>         _______________________________________________
>>         Password-Store mailing list
>>         Password-Store at lists.zx2c4.com
>>         <mailto:Password-Store at lists.zx2c4.com>
>>         https://lists.zx2c4.com/mailman/listinfo/password-store
>>
>
>     _______________________________________________
>     Password-Store mailing list
>     Password-Store at lists.zx2c4.com <mailto:Password-Store at lists.zx2c4.com>
>     https://lists.zx2c4.com/mailman/listinfo/password-store
>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.zx2c4.com/pipermail/password-store/attachments/20180709/4167e371/attachment.html>


More information about the Password-Store mailing list