# 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