aboutsummaryrefslogtreecommitdiff
path: root/compl/crypt.bash
blob: 8631050e224bdaf3f5bd71abf199fa09c3dcc90f (plain)
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
# Bash completion
#
# Copy to /usr/share/bash-completion/completions/crypt

_crypt() {
	COMPREPLY=()

	local location="${CRYPT_LOCATION:-$HOME/.crypt}"
	location="${location%/}/"
	local cur="${COMP_WORDS[COMP_CWORD]}"

	local IFS=$'\n'
	local suffix=".gpg"

	local firstitem=""
	local i=0 item
	local items=($(compgen -f $location$cur))

	for item in ${items[@]}; do
		[[ $item =~ /\.[^/]*$ ]] && continue

		if [[ ${#items[@]} -eq 1 ]]; then
			while [[ -d $item ]]; do
				local subitems=($(compgen -f "$item/"))
				local filtereditems=( ) item2
				for item2 in "${subitems[@]}"; do
					[[ $item2 =~ /\.[^/]*$ ]] && continue
					filtereditems+=( "$item2" )
				done
				if [[ ${#filtereditems[@]} -eq 1 ]]; then
					item="${filtereditems[0]}"
				else
					break
				fi
			done
		fi

		[[ -d $item ]] && item="$item/"

		item="${item%$suffix}"
		COMPREPLY+=("${item#$location}")
		if [[ $i -eq 0 ]]; then
			firstitem=$item
		fi
		let i+=1
	done

	if [[ $i -gt 1 || ( $i -eq 1 && -d $firstitem ) ]]; then
		compopt -o nospace
	fi
}

complete -o filenames -F _crypt crypt