summaryrefslogtreecommitdiff
path: root/src/completion/pass.bash-completion
diff options
context:
space:
mode:
Diffstat (limited to 'src/completion/pass.bash-completion')
-rw-r--r--src/completion/pass.bash-completion87
1 files changed, 87 insertions, 0 deletions
diff --git a/src/completion/pass.bash-completion b/src/completion/pass.bash-completion
new file mode 100644
index 0000000..d0ef012
--- /dev/null
+++ b/src/completion/pass.bash-completion
@@ -0,0 +1,87 @@
+# completion file for bash
+
+# Copyright (C) 2012 Jason A. Donenfeld <Jason@zx2c4.com> and
+# Brian Mattern <rephorm@rephorm.com>. All Rights Reserved.
+# This file is licensed 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_complete_keys () {
+ local IFS=$'\n'
+ # Extract names and email addresses from gpg --list-keys
+ local keys="$(gpg2 --list-secret-keys --with-colons | cut -d : -f 10 | sort -u | sed '/^$/d')"
+ COMPREPLY+=($(compgen -W "${keys}" -- ${cur}))
+}
+
+_pass()
+{
+ COMPREPLY=()
+ local cur="${COMP_WORDS[COMP_CWORD]}"
+ local commands="init ls show insert generate edit rm git help version"
+ if [[ $COMP_CWORD -gt 1 ]]; then
+ case "${COMP_WORDS[1]}" in
+ init)
+ COMPREPLY+=($(compgen -W "-e --reencrypt" -- ${cur}))
+ _pass_complete_keys
+ ;;
+ ls|list|edit)
+ _pass_complete_entries
+ ;;
+ show|-*)
+ COMPREPLY+=($(compgen -W "-c --clip" -- ${cur}))
+ _pass_complete_entries 1
+ ;;
+ insert)
+ COMPREPLY+=($(compgen -W "-e --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