#helper local comp cmd1 cmd2 pat val name # Completing in command position? If not we set up `cmd1' and `cmd2' as # two strings we have search in the completion definition arrays (e.g. # a path and the last path name component). if [[ $CONTEXT == command ]]; then comp="$comps[--command--]" [[ -z "$comp" ]] || callcomplete comps --command-- "$@" || return 1 return 0 elif [[ "$COMMAND[1]" == '=' ]]; then eval cmd1\=$COMMAND cmd2="$COMMAND[2,-1]" elif [[ "$COMMAND" == */* ]]; then cmd1="$COMMAND" cmd2="${COMMAND:t}" else cmd1="$COMMAND" eval cmd2=$(whence -p $COMMAND) fi # See if there are any matching pattern completions. if (( $#patcomps )); then for i in "$patcomps[@]"; do pat="${i% *}" val="${i#* }" if [[ "$cmd1" == $~pat || "$cmd2" == $~pat ]]; then callcomplete patcomps "$pat" "$@" || return 1 fi done fi # Now look up the two names in the normal completion array. name="$cmd1" comp="$comps[$cmd1]" if [[ -z "$comp" ]]; then name="$cmd2" comp="$comps[$cmd2]" fi # And generate the matches, probably using default completion. if [[ -z "$comp" ]]; then name=--default-- comp="$comps[--default--]" fi [[ -z "$comp" ]] || callcomplete comps "$name" "$@" || return 1 return 0