#!/usr/bin/env bash # shellcheck disable=SC1090 # dynamically sourced file _sqn_completions() { # Current search string local cur=${COMP_WORDS[COMP_CWORD]} # Extract alias command with buildins same as: # local curCmd="$(alias $1 | sed "s/^alias.*\" \"\(.*\)\"'$/\1/")" local curCmd= curCmd="$(alias "$1")" curCmd="${curCmd##*\" \"}" curCmd="${curCmd%\"\'*}" COMPREPLY=() case "$cur" in -*|+*) opts=( \ -- ++\ -a --all \ -c --config \ -d --dry-run \ -h --help \ -ha --helpapi \ -ls --liststeps \ -p --profile \ -pl \ -q --quiet \ -qq \ -s --single \ -v --verbose \ --version) read -r -d '' -a COMPREPLY < <(compgen -W "${opts[*]}" -- "$cur");; *) case "${COMP_WORDS[((COMP_CWORD-1))]}" in # provide completion for option with parameter -p|--profile) # sequencer.sh provides creation of a profile list with search functionality read -r -a COMPREPLY <<<"$( "$curCmd" -pl "${cur}" 2>/dev/null)" ;; *) # Stop after step selection (last argument which is not an option (starting with "-|+") # or option paramter (profile name)) if (( COMP_CWORD > 1 )) && [[ ! "${COMP_WORDS[((COMP_CWORD - 1))]}" =~ ^(-|\+) ]] ; then case "${COMP_WORDS[((COMP_CWORD - 2))]}" in -p|--profile) ;; *) return ;; esac fi # sequencer.sh provides creation of a step list with search functionality read -r -a COMPREPLY <<<"$( "$curCmd" -ls "$cur" )" ;; esac ;; esac return 0 } installCompletion() { # Get script working directory # (when called from a different directory) local script_dir= script_dir="$(cd "$(dirname -- "${BASH_SOURCE[0]}")" >>/dev/null 2>&1 && pwd)" . "${script_dir}/sequencer.cfg" >/dev/null 2>&1 local SEQBASE="${script_dir}/seqs" local SEQPREFIX="sqn_" local SEQSHORT=() # Check for user selected sequences [ -e "$SEQUENCER_USER_SEQS" ] && SEQBASE="$SEQUENCER_USER_SEQS" # Create aliases and command (alias) list for "complete" command" IFS=$'\n' read -r -d '' -a SEQLIST < <(ls -1 "$SEQBASE/${cur}"*.sh) for i in "${!SEQLIST[@]}"; do SEQLIST[$i]="${SEQLIST[$i]##*/}" SEQLIST[$i]="${SEQLIST[$i]%.*}" SEQSHORT[$i]="${SEQPREFIX}${SEQLIST[$i]/[[:blank:]]/_}" # shellcheck disable=SC2139,SC2086 # alias should be expanded when defined alias ${SEQSHORT[$i]}="_SQN_ALIAS=\"${SEQSHORT[$i]}\" \"$SEQBASE/${SEQLIST[$i]}.sh\"" done complete -o nosort -o bashdefault -o default -F _sqn_completions "${SEQSHORT[@]}" } installCompletion