aboutsummaryrefslogtreecommitdiff
path: root/bible.bash
diff options
context:
space:
mode:
Diffstat (limited to 'bible.bash')
-rw-r--r--bible.bash76
1 files changed, 76 insertions, 0 deletions
diff --git a/bible.bash b/bible.bash
new file mode 100644
index 0000000..e614cbc
--- /dev/null
+++ b/bible.bash
@@ -0,0 +1,76 @@
+# bible(1) completion -*- shell-script -*-
+
+# These are bash completions for the bible executable
+
+_bible()
+{
+ local cur prev words cword split
+ # -s splits option=value into option in $prev and value in $cur
+ # -n : keeps the colon from signifying the end of a token
+ _init_completion -s -n : || return
+ case $prev in
+ --module | -m | --set-default-module | --remove-module)
+ COMPREPLY=($(compgen -W "`bible --list-modules | tail -n+2 | awk '{print $1}'`" -- "$cur"))
+ return
+ ;;
+ --list-chapters)
+ # If we already have -m, use that. Else if a default is set, use that. Else, just return.
+ # Scan COMP_WORDS for -m or --module
+ mod="`grep -Po '(?<=\-m |\-\-module ).*?(?= )' <<< "${COMP_WORDS[@]}"`"
+ if [ -z "$mod" ]; then
+ # If we get here, then we need to set mod using the default module
+ mod="`bible --list-modules | grep '(default)' | awk '{print $1}'`"
+ if [ -z "$mod" ]; then
+ # We tried.
+ return
+ fi
+ fi
+ # Tricky because of spaces in names
+ books="`bible -m $mod --list-books | tail -n+2 | sed 's/^ //' | sed 's/ /\\\\ /g'`"
+ books="${books//\\ /___}"
+ COMPREPLY=()
+ for iter in $books; do
+ if [[ $iter =~ "___" ]]; then
+ iter="\"${iter//___/ }\""
+ fi
+ if [[ $iter =~ ^$cur ]] || [[ $iter =~ ^\"$cur ]]; then
+ COMPREPLY+=("$iter")
+ fi
+ done
+ return
+ ;;
+ --install-network)
+ # Use cur to first grab language, then module
+ if [[ $cur == *:* ]]; then
+ # We're working on the mod, not language
+ lang=`cut -d: -f1 <<< $cur`
+ COMPREPLY=($(compgen -W "`bible --list-installable | grep -Pzo '(?s)For language '$lang':.*?(?=For language)' | tail -n+2 | sed 's/ /'$lang':/' | tr -d '\000'`" -- "$cur"))
+ else
+ # We're working on the language, not mod
+ compopt -o nospace
+ COMPREPLY=($(compgen -W "`bible --list-installable | grep 'For language' | awk '{print $3}'`" -- "$cur"))
+ fi
+ __ltrim_colon_completions "$cur"
+ return
+ ;;
+ --install-zip)
+ _filedir '@(zip)'
+ return
+ ;;
+ --list-installable)
+ COMPREPLY=($(compgen -W "`bible --list-installable | grep 'For language' | sed 's/For language //' | cut -d: -f1`" -- "$cur"))
+ return
+ ;;
+ --help | --list-books | --omit-verse-numbers | --list-modules | --list-installable | -[ho])
+ return
+ ;;
+ esac
+
+ $split && return
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W "`_parse_help "$1"`" -- "$cur"))
+ [[ ${COMPREPLY-} == *= ]] && compopt -o nospace
+ fi
+} &&
+ complete -F _bible bible