# shellcheck disable=SC2207 mydir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" [[ :$PATH: != *:"${mydir}":* ]] && export PATH="$PATH:${mydir}" __dotbare_completion() { local IFS=$'\n' subcommands curr prev options verbose_options suggestions curr="${COMP_WORDS[$COMP_CWORD]}" prev="${COMP_WORDS[$COMP_CWORD-1]}" if [[ "$COMP_CWORD" -eq "1" ]]; then subcommands=$( "${mydir}"/dotbare -h \ | awk '{ if ($0 ~ /^ f.*/) { gsub(/^ /, "", $0) gsub(/\t\t/, " ", $0) print $0 } }' ) options=$( "${mydir}"/dotbare -h \ | awk '{ if ($0 ~ /^ -.*/) { gsub(/,/, " ", $0) gsub(/^ /, "", $0) gsub(/\t\t/, " ", $0) $2="" print $0 } }' ) verbose_options=$("${mydir}"/dotbare -h | awk '$0 ~ /^ -.*/ {print $2}') if [[ "${curr}" == --* ]]; then suggestions=($(compgen -W "${verbose_options}" -- "${curr}")) elif [[ "${curr}" == -* ]]; then suggestions=($(compgen -W "${options}" -- "${curr}")) else suggestions=($(compgen -W "${subcommands}" -- "${curr}")) fi elif [[ "${COMP_CWORD}" -eq 2 && "${prev}" == "-g" || "${prev}" == "--git" ]]; then subcommands=$( "${mydir}"/dotbare -h \ | awk '{ if ($0 ~ /^ f.*/) { if ($0 ~ /^ f(backup|init|upgrade).*/) { next } gsub(/^ /, "", $0) gsub(/\t\t/, " ", $0) print $0 } }' ) suggestions=($(compgen -W "${subcommands}" -- "${curr}")) elif [[ "${COMP_WORDS[1]}" == "-g" || "${COMP_WORDS[1]}" == "--git" ]] && [[ "${COMP_CWORD}" -gt 2 ]]; then if [[ "${curr}" == --* && "${prev}" != "-h" && "${prev}" != "--help" ]]; then verbose_options=$( "${mydir}"/dotbare "${COMP_WORDS[2]}" -h 2> /dev/null \ | awk '{ if ($0 ~ /^ -p PATH/) { next } else if ($0 ~ /^ -u URL/) { next } else if ($0 ~ /^ -*/) { print $2 } }' ) suggestions=($(compgen -W "${verbose_options}" -- "${curr}")) elif [[ "${prev}" != "-h" && "${prev}" != "--help" ]]; then options=$( "${mydir}"/dotbare "${COMP_WORDS[2]}" -h 2> /dev/null \ | awk '{ gsub(/,/, " ", $0) if ($0 ~ /^ -p PATH/) { next } else if ($0 ~ /^ -u URL/) { next } else if ($0 ~ /^ -*/) { gsub(/^ /, "", $0) gsub(/\t/, " ", $0) $2="" print $0 } }' ) suggestions=($(compgen -W "${options}" -- "${curr}")) else return fi elif [[ "${COMP_WORDS[1]}" == "fbackup" ]] && [[ "${prev}" == "-p" || "${prev}" == "--path" ]]; then COMPREPLY=($(compgen -d -- "${curr}")) return elif [[ "${COMP_WORDS[1]}" == "finit" ]] && [[ "${prev}" == "-u" || "${prev}" == "--url" ]]; then return elif [[ "${curr}" == --* && "${prev}" != "-h" && "${prev}" != "--help" ]]; then verbose_options=$( "${mydir}"/dotbare "${COMP_WORDS[1]}" -h 2> /dev/null \ | awk '{ if ($0 ~ /^ -p PATH/) { print "--path" } else if ($0 ~ /^ -u URL/) { print "--url" } else if ($0 ~ /^ -c COL/) { print "--col" } else if ($0 ~ /^ -*/) { print $2 } }' ) suggestions=($(compgen -W "${verbose_options}" -- "${curr}")) elif [[ "${prev}" != "-h" && "${prev}" != "--help" ]]; then options=$( "${mydir}"/dotbare "${COMP_WORDS[1]}" -h 2> /dev/null \ | awk '{ gsub(/,/, " ", $0) if ($0 ~ /^ -p PATH/) { gsub(/^ -p PATH --path PATH/, "-p", $0) gsub(/\t/, " ", $0) print $0 } else if ($0 ~ /^ -u URL/) { gsub(/^ -u URL --url URL/, "-u", $0) gsub(/\t/, " ", $0) print $0 } else if ($0 ~ /^ -c COL/) { gsub(/^ -c COL --col COL/, "-c", $0) gsub(/\t/, " ", $0) print $0 } else if ($0 ~ /^ -*/) { gsub(/^ /, "", $0) gsub(/\t/, " ", $0) $2="" print $0 } }' ) suggestions=($(compgen -W "${options}" -- "${curr}")) fi if [[ "${#suggestions[*]}" -eq 1 ]]; then COMPREPLY=("${suggestions[@]%% *}") else for i in "${!suggestions[@]}"; do suggestions[$i]="$(printf '%*s' "-$COLUMNS" "${suggestions[$i]}")" done COMPREPLY=("${suggestions[@]}") fi } _dotbare_completion_cmd() { local complete_name="${1:-dotbare}" complete -F __dotbare_completion "${complete_name}" } _dotbare_completion_git() { local complete_name="${1:-dotbare}" complete -F _git "${complete_name}" }