#compdef pass # Copyright (C) 2012 Johan Venant and # Brian Mattern . All Rights Reserved. # This file is licensed under the GPLv2+. Please see COPYING for more information. _pass () { local cmd if (( CURRENT > 2)); then cmd=${words[2]} # Set the context for the subcommand. curcontext="${curcontext%:*:*}:pass-$cmd" # Narrow the range of words we are looking at to exclude `pass' (( CURRENT-- )) shift words # Run the completion for the subcommand case "${cmd}" in init) _arguments : \ "-r[re-encrypt existing passwords]" \ "--reencrypt[re-encrypt existing passwords]" _pass_complete_keys ;; ls|list|edit) _pass_complete_entries_with_subdirs ;; insert) _arguments : \ "-n[no console output]" \ "--no-echo[no console output]" \ "-m[multiline]" \ "--multiline[multiline]" _pass_complete_entries_with_subdirs ;; generate) _arguments : \ "-n[don't include symbols in password]" \ "--no-symbols[don't include symbols in password]" \ "-c[copy password to the clipboard]" \ "--clip[copy password to the clipboard]" _pass_complete_entries_with_subdirs ;; rm) _arguments : \ "-f[force deletion]" \ "--force[force deletion]" \ "-r[recursively delete]" \ "--recursive[recursively delete]" _pass_complete_entries_with_subdirs ;; git) _values 'subcommands' \ "init[Initialize git repository]" \ "push[Push to remote repository]" \ "pull[Pull from remote repository]" \ "config[Show git config]" \ "log[Show git log]" \ "reflog[Show git reflog]" ;; show|*) _pass_cmd_show ;; esac else _values 'command' \ "init[Initialize new password storage]" \ "ls[List passwords]" \ "show[Decrypt and print a password]" \ "insert[Insert a new password]" \ "generate[Generate a new password using pwgen]" \ "edit[Edit a password with \$EDITOR]" \ "rm[Remove the password]" \ "git[Call git on the password store]" \ "version[Output version information]" \ "help[Output help message]" _arguments : \ "--version[Output version information]" \ "--help[Output help message]" _pass_cmd_show fi } _pass_cmd_show () { _arguments : \ "-c[put it on the clipboard]" \ "--clip[put it on the clipboard]" _pass_complete_entries } _pass_complete_entries_helper () { local IFS=$'\n' local prefix="${PASSWORD_STORE_DIR:-$HOME/.password-store}" _values -C 'passwords' $(find "$prefix" \( -name .git -o -name .gpg-id \) -prune -o $@ -print | sed -e "s#${prefix}.##" -e 's#\.gpg##' | sort) } _pass_complete_entries_with_subdirs () { _pass_complete_entries_helper } _pass_complete_entries () { _pass_complete_entries_helper -type f } _pass_complete_keys () { local IFS=$'\n' # Extract names and email addresses from gpg --list-keys _values 'gpg keys' $(gpg --list-secret-keys --with-colons | cut -d : -f 10 | sort -u | sed '/^$/d') }