#autoload # The main loop of the completion code. This is what is called when # completion is attempted from the command line. # The completion code gives us the special variables and the arguments # from the command line are given as positional parameters. local comp name setopt localoptions nullglob rcexpandparam globdots unsetopt markdirs globsubst shwordsplit nounset # An entry for `-first-' is the replacement for `compctl -T' # Completion functions may set `COMPSKIP' to any value to make the # main loops stop calling other completion functions. comp="$comps[-first-]" if [[ ! -z "$comp" ]]; then "$comp" "$@" if (( $+COMPSKIP )); then unset COMPSKIP return fi fi # For arguments we use the `_normal function. if [[ $CONTEXT == argument || $CONTEXT == command ]]; then _normal "$@" else # Let's see if we have a special completion definition for the other # possible contexts. comp='' case $CONTEXT in redirect) comp="$comps[-redirect-]";; math) comp="$comps[-math-]";; subscript) comp="$comps[-subscript-]";; value) comp="$comps[-value-]";; condition) comp="$comps[-condition-]";; esac # If not, we use default completion, if any. [[ -z "$comp" ]] && comp="$comps[-default-]" [[ -z "$comp" ]] || "$comp" "$@" fi