aboutsummaryrefslogtreecommitdiff
path: root/files/dmtool.bash
diff options
context:
space:
mode:
authorYour Name <you@example.com>2021-05-06 17:00:00 -0400
committerYour Name <you@example.com>2021-05-06 17:00:00 -0400
commitbf6db4e57895430d84503e800cec9e8b407212a8 (patch)
treebc21559fc0bff2ad616c5d69a45b5a22cc8cea60 /files/dmtool.bash
parent5ed030a38810e4a3bb9c969db6892065581340c6 (diff)
downloaddmtool-bf6db4e57895430d84503e800cec9e8b407212a8.tar.gz
dmtool-bf6db4e57895430d84503e800cec9e8b407212a8.tar.bz2
dmtool-bf6db4e57895430d84503e800cec9e8b407212a8.zip
Added a real configuration file (plus a dependency on libconfuse)
Diffstat (limited to 'files/dmtool.bash')
-rw-r--r--files/dmtool.bash139
1 files changed, 139 insertions, 0 deletions
diff --git a/files/dmtool.bash b/files/dmtool.bash
new file mode 100644
index 0000000..ffc75f7
--- /dev/null
+++ b/files/dmtool.bash
@@ -0,0 +1,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