blob: 28484761db834c595d34485a6a98e065e5889e28 (
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
|
# Requires Bash >= 4.0 for globstar
((BASH_VERSINFO[0] >= 4)) || return
# Custom completion for pass(1), because I don't like the one included with the
# distribution
_pass()
{
# If we can't read the password directory, just bail
local passdir
passdir=${PASSWORD_STORE_DIR:-$HOME/.password-store}
[[ -r $passdir ]] || return 1
# Iterate through list of .gpg paths, extension stripped, null-delimited,
# and filter them down to the ones matching the completing word (compgen
# doesn't seem to do this properly with a null delimiter)
local entry
while IFS= read -d '' -r entry ; do
COMPREPLY[${#COMPREPLY[@]}]=$entry
done < <(
# Set shell options to expand globs the way we expect
shopt -u dotglob
shopt -s globstar nullglob
# Gather the entries and remove their .gpg suffix
declare -a entries
entries=("$passdir"/"${COMP_WORDS[COMP_CWORD]}"*/**/*.gpg \
"$passdir"/"${COMP_WORDS[COMP_CWORD]}"*.gpg)
entries=("${entries[@]#$passdir/}")
entries=("${entries[@]%.gpg}")
# Bail if no entries to prevent empty output
((${#entries[@]})) || exit 1
# Print all the entries, null-delimited
printf '%q\0' "${entries[@]}"
)
}
complete -F _pass pass
|