# completion file for bash # (C) Copyright 2012 Jason A. Donenfeld and # Brian Mattern . All Rights Reserved. # This is released under the GPLv2+. Please see COPYING for more information. _pass_complete_entries () { prefix="${PASSWORD_STORE_DIR:-$HOME/.password-store/}" suffix=".gpg" autoexpand=${1:-0} local IFS=$'\n' local items=($(compgen -f $prefix$cur)) for item in ${items[@]}; do if [[ $item == $prefix.* ]]; then continue fi # if there is a unique match, and it is a directory with one entry # autocomplete the subentry as well (recursively) if [[ ${#items[@]} -eq 1 && $autoexpand -eq 1 ]]; then while [[ -d $item ]]; do local subitems=($(compgen -f "$item/")) if [[ ${#subitems[@]} -eq 1 ]]; then item="${subitems[0]}" else break fi done fi # append / to directories [[ -d $item ]] && item="$item/" item="${item%$suffix}" COMPREPLY+=("${item#$prefix}") done } _pass() { COMPREPLY=() local cur="${COMP_WORDS[COMP_CWORD]}" local commands="init ls show insert generate edit rm git help --help version --version" if [[ $COMP_CWORD -gt 1 ]]; then case "${COMP_WORDS[1]}" in init) COMPREPLY+=($(compgen -W "-e --reencrypt" -- ${cur})) local keys=$(gpg --list-keys |grep uid |sed 's/.*<\(.*\)>/\1/') COMPREPLY+=($(compgen -W "${keys}" -- ${cur})) ;; ls|list|edit) _pass_complete_entries ;; show|-*) COMPREPLY+=($(compgen -W "-c --clip" -- ${cur})) _pass_complete_entries 1 ;; insert) COMPREPLY+=($(compgen -W "-n --no-echo -m --multiline -f --force" -- ${cur})) _pass_complete_entries ;; generate) COMPREPLY+=($(compgen -W "-n --no-symbols -c --clip -f --force" -- ${cur})) _pass_complete_entries ;; rm|remove|delete) COMPREPLY+=($(compgen -W "-r --recursive -f --force" -- ${cur})) _pass_complete_entries ;; git) COMPREPLY+=($(compgen -W "init push pull config log reflog" -- ${cur})) ;; esac else COMPREPLY+=($(compgen -W "${commands}" -- ${cur})) _pass_complete_entries 1 fi } complete -o filenames -o nospace -F _pass pass