blob: 41f70e96535a8650b3bc16a186718c7182d6c241 (
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
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
82
83
84
85
86
87
88
89
90
91
92
93
94
|
# bash completion file for dmtool
# Modified from bash completion for password-store
_dmtool_complete_entries () {
local prefix1="${HOME}/.dmtool/"
prefix1="${prefix1%/}/"
local prefix2="/usr/share/dmtool/"
prefix2="${prefix2%/}/"
local suffix=".json"
local autoexpand=${1:-0}
local IFS=$'\n'
local items=($(compgen -f $prefix1$cur))
items+=($(compgen -f $prefix2$cur))
# Remember the value of the first item, to see if it is a directory. If
# it is a directory, then don't add a space to the completion
local firstitem=""
# Use counter, can't use ${#items[@]} as we skip hidden directories
local i=0 item
for item in ${items[@]}; do
[[ $item =~ /\.[^/]*$ ]] && continue
# 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/"))
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
# append / to directories
[[ -d $item ]] && item="$item/"
item="${item%$suffix}"
local prefix1ed="${item#$prefix1}"
COMPREPLY+=("${prefix1ed#$prefix2}")
if [[ $i -eq 0 ]]; then
firstitem=$item
fi
let i+=1
done
# The only time we want to add a space to the end is if there is only
# one match, and it is not a directory
if [[ $i -gt 1 || ( $i -eq 1 && -d $firstitem ) ]]; then
compopt -o nospace
fi
}
_dmtool()
{
COMPREPLY=()
local cur="${COMP_WORDS[COMP_CWORD]}"
local commands="ls cp mkdir mv rm roll damage heal reset set help"
if [[ $COMP_CWORD -gt 1 ]]; then
local lastarg="${COMP_WORDS[$COMP_CWORD-1]}"
case "${COMP_WORDS[1]}" in
ls|mkdir|rm|reset)
_dmtool_complete_entries
;;
cp|mv)
if [[ $COMP_CWORD -le 3 ]]; then
_dmtool_complete_entries
fi
;;
roll|damage|heal|set|add)
if [[ $COMP_CWORD -le 2 ]]; then
_dmtool_complete_entries
else
# Other various stuff
:
fi
;;
esac
else
COMPREPLY+=($(compgen -W "${commands}" -- ${cur}))
_dmtool_complete_entries 1
fi
}
complete -o filenames -F _dmtool dmtool
|