blob: ffc75f76f1c3b846aefa4a86c54842cec18cea83 (
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
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
|
# 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_skills()
{
echo -e "athletics\nacrobatics\nstealth\narcana\nhistory\ninvestigation\nnature\nreligion\ninsight\nmedicine\nperception\nsurvival\ndeception\nintimidation\nperformance\npersuasion\nsleight of hand\nanimal handling"
}
_dmtool_abilities()
{
echo -e "str\ndex\ncon\nint\nwis\ncha"
}
_dmtool_complete_skills_abilities()
{
local IFS=$'\n'
COMPREPLY+=($(compgen -W "$(_dmtool_skills)" -- ${cur}))
COMPREPLY+=($(compgen -W "$(_dmtool_abilities)" -- ${cur}))
}
_dmtool()
{
COMPREPLY=()
local cur="${COMP_WORDS[COMP_CWORD]}"
local commands="ls cp mkdir mv rm attacks roll damage heal reset set edit add del 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|add)
if [[ $COMP_CWORD -le 3 ]]; then
_dmtool_complete_entries
fi
;;
attacks|roll|damage|heal|set|edit|del)
if [[ $COMP_CWORD -le 2 ]]; then
_dmtool_complete_entries
else
case "${COMP_WORDS[1]}" in
roll)
_dmtool_complete_skills_abilities
# Add in attacks
local IFS=$'\n'
opts="$(${COMP_WORDS[0]} attacks ${COMP_WORDS[2]})"
COMPREPLY+=($(compgen -W "$opts" -- ${cur}))
;;
damage)
COMPREPLY+=($(compgen -W "--magical -m --silvered -s --adamantine -a" -- ${cur}))
if [[ $COMP_CWORD -eq 4 ]]; then
COMPREPLY+=($(compgen -W "slashing piercing bludgeoning poison acid fire cold radiant necrotic lightning thunder force psychic" -- ${cur}))
fi
;;
set)
if [[ $COMP_CWORD -eq 3 ]]; then
_dmtool_complete_skills_abilities
COMPREPLY+=($(compgen -W "proficiency name" -- ${cur}))
elif [[ $COMP_CWORD -eq 4 ]]; then
local skills="$(_dmtool_skills)"
if [[ "$skills" =~ "$lastarg" ]]; then
COMPREPLY+=($(compgen -W "none proficient expert" -- ${cur}))
fi
fi
;;
del)
#TODO: Add items and spells
_dmtool_complete_skills_abilities
;;
esac
fi
;;
esac
else
COMPREPLY+=($(compgen -W "${commands}" -- ${cur}))
_dmtool_complete_entries 1
fi
}
complete -o filenames -F _dmtool dmtool
|