aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/contrib/pass.bash-completion
blob: 95b905f774e7a28a5f4b8c59f0f04534a214cbca (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
# completion file for bash

# (C) Copyright 2012 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
# This is released under the GPLv2+. Please see COPYING for more information.

_pass_complete_entries () {
	prefix="$HOME/.password-store/"
	suffix=".gpg"
  autoexpand=${1:-0}

	local IFS=$'\n'
	local i=0
	for item in $(compgen -f $prefix$cur); do
		if [[ $item == $prefix.* ]]; then
			continue
		fi
    # append / to directories and recursively expand single-entry dirs
    while [[ -d $item ]]; do
      item="$item/"
      if [[ $autoexpand -eq 1 ]]; then
        subitems=($(compgen -f $item))
        if [[ ${#subitems[@]} -eq 1 ]]; then
          item="${subitems[0]}"
        else
          break
        fi
      else
        break
      fi
    done
		item="${item%$suffix}"
    COMPREPLY[$i]=$(printf "%q" "${item#$prefix}" )
		(( i++ ))
	done
}

_pass()
{
  local cur prev opts base

  COMPREPLY=()
  cur="${COMP_WORDS[COMP_CWORD]}"
  prev="${COMP_WORDS[COMP_CWORD-1]}"

  commands="init ls show insert generate edit rm git help version --version"
  if [[ $COMP_CWORD -gt 1 ]]; then
    case "${COMP_WORDS[1]}" in
      init)
        keys=$(gpg --list-keys |grep uid |sed 's/.*<\(.*\)>/\1/')
        COMPREPLY+=($(compgen -W "${keys}" -- ${cur}))
        ;;
      ls)
        _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" -- ${cur}))
        _pass_complete_entries
        ;;
      edit)
        _pass_complete_entries
        ;;
      rm)
        COMPREPLY+=($(compgen -W "-r --recursive -f --force" -- ${cur}))
        _pass_complete_entries
        ;;
    esac
  else
    COMPREPLY+=($(compgen -W "${commands}" -- ${cur}))
    _pass_complete_entries 1
  fi
}

complete -o nospace -F _pass pass