pass choose

William Morris me at williammorris.com
Sat May 12 04:33:56 CEST 2018


I like this but I wonder if it might make more sense to implement this
as an extension.

On 05/11/2018 08:31 PM, Philippe Biondi wrote:
> Hello,
> 
> I've always been lazy, and I also tend to forget where I put my stuff.
> For the second point, "pass find" was a benediction. But once the path
> I'm looking for has been found, I find it painful to enter it again with
> a new invocation of "pass". Even more painful that I already entered
> enough to find it.
> 
> So I wrote this little quick patch to add a "choose" command:
> 
>     pass choose [pass-names...]
>     	List passwords that match pass-names and ask to choose one
> 
> It works a lot like "pass find", except that:
> - when only one file has been found, it is decrypted
> - when many files have been found, a choice is asked and the chosen file
>   is decrypted
> 
> Ex:
> -----------8<---------------
> $ pass choose mast
> Search Terms: mast
>     ├── work
>     │    └── bank
>   1 │         └── mastercard
>     └── infra
>          └── masterdb
>   2           ├── console
>   3           ├── db
>   4           └── infrasys_volume
> Choose a line: 1
> Choosing: work/bank/mastercard
> 
> Please enter the passphrase to unlock the OpenPGP secret key:
> [...]
> -----------8<---------------
> 
> The following patch is only a preliminary work on a late night and I
> probably forgot one thing or two. But if you find this useful and are
> willing to integrate it, let me know what is missing to have it accepted.
> 
> 
> diff --git a/src/password-store.sh b/src/password-store.sh
> index eac5404..dae31ea 100755
> --- a/src/password-store.sh
> +++ b/src/password-store.sh
> @@ -263,6 +263,8 @@ cmd_usage() {
>                 List passwords.
>             $PROGRAM find pass-names...
>                 List passwords that match pass-names.
> +           $PROGRAM choose [pass-names...]
> +               List passwords that match pass-names and ask to choose one
>             $PROGRAM [show] [--clip[=line-number],-c[line-number]] pass-name
>                 Show existing password and optionally put it on the clipboard.
>                 If put on the clipboard, it will be cleared in $CLIP_TIME seconds.
> @@ -394,6 +396,44 @@ cmd_find() {
>         tree -C -l --noreport -P "${terms%|*}" --prune --matchdirs --ignore-case "$PREFIX" | tail -n +2 | sed -E 's/\.gpg(\x1B\[[0-9]+m)?( ->|$)/\1\2/g'
>  }
>  
> +cmd_choose() {
> +       IFS="," eval 'echo "Search Terms: $*"'
> +       local terms="*$(printf '%s*|*' "$@")"
> +       readarray < <(tree -i -C -l -f --noreport -P "${terms%|*}" --prune --matchdirs --ignore-case ~/.password-store|tail -n +2|grep '\.gpg$')
> +       i=0
> +       OIFS=$IFS
> +       export IFS=""
> +       tree -C -l --noreport -P "${terms%|*}" --prune --matchdirs --ignore-case "$PREFIX" | tail -n +2 |  while read a; do
> +               b=$(echo $a|sed -E 's/\.gpg(\x1B\[[0-9]+m)?( ->|$)/\1\2/g')
> +               if echo $a|grep -q '\.gpg$'; then
> +                       i=$((i+1))
> +                       printf "%3i %s\n" "$i" "$b"
> +               else
> +                       printf "    %s\n" "$b"
> +               fi
> +       done
> +       IFS="$OIFS"
> +       chosen=""
> +       maplen=${#MAPFILE[*]}
> +       if [ $maplen -eq 1 ]; then
> +               chosen=${MAPFILE[0]}
> +       fi
> +       if [ $maplen -ge 1 ]; then
> +               while [ "x$chosen" == "x" ]; do
> +                       read -p "Choose a line: " r
> +                       r=$(($r-1))
> +                       chosen=${MAPFILE[$r]}
> +               done
> +               chosen=$(echo ${chosen#$PREFIX/}) # get rid of trailing newline with echo
> +               chosen=${chosen%.gpg}
> +               echo "Choosing: $chosen"
> +               echo
> +               cmd_show $chosen
> +       fi
> +}
> +
> +
> +
>  cmd_grep() {
>         [[ $# -ne 1 ]] && die "Usage: $PROGRAM $COMMAND search-string"
>         local search="$1" passfile grepresults
> @@ -686,6 +726,7 @@ case "$1" in
>         version|--version) shift;       cmd_version "$@" ;;
>         show|ls|list) shift;            cmd_show "$@" ;;
>         find|search) shift;             cmd_find "$@" ;;
> +       choose) shift;                  cmd_choose "$@" ;;
>         grep) shift;                    cmd_grep "$@" ;;
>         insert|add) shift;              cmd_insert "$@" ;;
>         edit) shift;                    cmd_edit "$@" ;;
> _______________________________________________
> Password-Store mailing list
> Password-Store at lists.zx2c4.com
> https://lists.zx2c4.com/mailman/listinfo/password-store
> 


More information about the Password-Store mailing list