diff options
author | Your Name <you@example.com> | 2021-05-06 17:00:00 -0400 |
---|---|---|
committer | Your Name <you@example.com> | 2021-05-06 17:00:00 -0400 |
commit | bf6db4e57895430d84503e800cec9e8b407212a8 (patch) | |
tree | bc21559fc0bff2ad616c5d69a45b5a22cc8cea60 /files/dmtool.bash | |
parent | 5ed030a38810e4a3bb9c969db6892065581340c6 (diff) | |
download | dmtool-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.bash | 139 |
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 |