#!/bin/bash # This is a shell completion script auto-generated by https://github.com/urfave/cli for bash. # Macs have bash3 for which the bash-completion package doesn't include # _init_completion. This is a minimal version of that function. __%[1]s_init_completion() { COMPREPLY=() _get_comp_words_by_ref "$@" cur prev words cword } __%[1]s_bash_autocomplete() { if [[ "${COMP_WORDS[0]}" != "source" ]]; then local cur opts base words COMPREPLY=() cur="${COMP_WORDS[COMP_CWORD]}" if declare -F _init_completion >/dev/null 2>&1; then _init_completion -n "=:" || return else __%[1]s_init_completion -n "=:" || return fi words=("${words[@]:0:$cword}") if [[ "$cur" == "-"* ]]; then requestComp="${words[*]} ${cur} --generate-shell-completion" else requestComp="${words[*]} --generate-shell-completion" fi opts=$(eval "${requestComp}" 2>/dev/null) # Separate completions and descriptions local completions=() local descriptions=() local longest=0 while IFS=$'\n' read -r line; do local comp_part desc_part if [[ "$line" == *:* ]]; then comp_part="${line%%:*}" desc_part="${line#*:}" else comp_part="$line" desc_part="" fi completions+=("$comp_part") descriptions+=("$desc_part") (( ${#comp_part} > longest )) && longest=${#comp_part} done <<< "$opts" # Format completions with aligned descriptions for i in "${!completions[@]}"; do local padded_completion="${completions[i]}" local pad_len=$((longest - ${#padded_completion})) if (( pad_len > 0 )); then padded_completion="${padded_completion}$(head -c $pad_len < /dev/zero | tr '\0' ' ')" fi if [[ -n "${descriptions[i]}" ]]; then COMPREPLY+=("${padded_completion} -- ${descriptions[i]}") else COMPREPLY+=("${padded_completion}") fi done return 0 fi } complete -o bashdefault -o default -o nospace -F __%[1]s_bash_autocomplete %[1]s