sites

public wiki contents of suckless.org
git clone git://git.suckless.org/sites
Log | Files | Refs

passmenu2 (1244B)


      1 #!/usr/bin/env bash
      2 
      3 shopt -s nullglob globstar
      4 
      5 typeit=0
      6 if [[ $1 == "--type" ]]; then
      7 	typeit=1
      8 	shift
      9 fi
     10 
     11 
     12 STARTDIR=${PASSWORD_STORE_DIR-~/.password-store}
     13 BASEDIR=$STARTDIR
     14 DONE=0
     15 LEVEL=0
     16 PREVSELECTION=""
     17 SELECTION=""
     18 
     19 while [ "$DONE" -eq 0 ] ; do 
     20   password_files=( "$STARTDIR"/* )
     21   password_files=( "${password_files[@]#"$STARTDIR"/}" )
     22   password_files=( "${password_files[@]%.gpg}" )
     23   
     24   if [ "$LEVEL" -ne 0 ] ; then
     25     password_files=(".." "${password_files[@]}") 
     26   fi
     27   entry=$(printf '%s\n' "${password_files[@]}" | dmenu "$@" -l 15)
     28   
     29   echo "entry: $entry"
     30   if [ -z "$entry" ] ; then
     31     DONE=1
     32     exit
     33   fi
     34   
     35   if [ "$entry" != ".." ] ; then
     36     PREVSELECTION=$SELECTION
     37     SELECTION="$SELECTION/$entry"
     38   
     39     # check if another dir
     40     if [ -d "$STARTDIR/$entry" ] ; then
     41       STARTDIR="$STARTDIR/$entry"
     42       LEVEL=$((LEVEL+1))
     43     else
     44       # not a directory so it must be a real password entry
     45   
     46       if [[ $typeit -eq 0 ]]; then
     47         pass show -c "$SELECTION" 2>/dev/null
     48       else
     49         xdotool - <<<"type --clearmodifiers -- $(pass show "$SELECTION" | head -n 1)"
     50       fi
     51       DONE=1
     52     fi
     53   
     54   else
     55     LEVEL=$((LEVEL-1))
     56     SELECTION=$PREVSELECTION
     57     STARTDIR="$BASEDIR/$SELECTION"
     58   fi
     59 done
     60