#/usr/bin/env bash _sqnall_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="$(alias "$1")" curCmd="${curCmd##*\" }" curCmd="${curCmd%\'*}" COMPREPLY=() case "$cur" in -*) COMPREPLY=( $( compgen -W '\ -a --all \ -c --config \ -d --dry-run \ -h --help \ -ha --helpapi \ -ls --liststeps \ -p --profile \ -pl \ -q --quiet \ -qq \ -s --single \ -v --verbose \ --version' -- $cur ) );; *) # Stop after step selection (last argument which is not an option; starting with "-") (( COMP_CWORD > 1 )) && [[ ! "${COMP_WORDS[((COMP_CWORD - 1))]}" =~ ^- ]] && return # sequencer.sh provides creation of a step list with search functionality COMPREPLY=( $( "$curCmd" -ls "$cur" ) );; esac return 0 } installCompletion() { # Get script working directory # (when called from a different directory) local WDIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" >>/dev/null 2>&1 && pwd)" . ${WDIR}/sequencer.cfg &>/dev/null local SEQBASE="${WDIR}/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" SEQLIST=($(ls "$SEQBASE/$cur"*.sh)) for i in "${!SEQLIST[@]}"; do SEQLIST[$i]="${SEQLIST[$i]##*/}" SEQLIST[$i]="${SEQLIST[$i]%.*}" SEQSHORT[$i]="${SEQPREFIX}${SEQLIST[$i]}" alias ${SEQSHORT[$i]}="_SQN_ALIAS=\"${SEQSHORT[$i]}\" $SEQBASE/${SEQLIST[$i]}.sh" done complete -o nosort -o bashdefault -o default -F _sqnall_completions ${SEQSHORT[@]} } installCompletion