#autoload # The main loop of the completion code. This is what is called when # completion is attempted from the command line. # If you want to complete only set or unset options for the unsetopt # and setopt builtin, un-comment these lines: # # local _set_options _unset_options # # if zmodload -e parameter; then # _set_options=(${(k)options[(R)on]}) # _unset_options=(${(k)options[(R)off]}) # else # _set_options=("${(@f)$({ unsetopt kshoptionprint; setopt } 2>/dev/null)}") # _unset_options=("${(@f)$({ unsetopt kshoptionprint; unsetopt } 2>/dev/null)}") # fi # # This is needed because completion functions may set options locally # which makes the output of setopt and unsetopt reflect a different # state than the global one for which you are completing. local comp ret=1 _compskip typeset -U _lastdescr setopt localoptions nullglob rcexpandparam unsetopt markdirs globsubst shwordsplit nounset ksharrays # Special completion contexts after `~' and `='. if compset -P 1 '\='; then compstate[context]=equal elif [[ "$PREFIX" != */* && "$PREFIX[1]" = '~' ]]; then compset -p 1 compstate[context]=tilde fi # Get the names of the completers to use in the positional parameters. (( $# )) || set ${(s.:.)compconfig[completer]} # And now just call the completer functions defined. for comp; do if "$comp"; then ret=0 break; fi done # Now call the post-functions. for post in "$comppostfuncs[@]"; do "$post" done comppostfuncs=() _lastdescr=( "\`${(@)^_lastdescr:#}'" ) if [[ compstate[nmatches] -eq 0 && -n "$compconfig[warning_format]" && $#_lastdescr -ne 0 ]]; then local str compstate[list]=list compstate[force_list]=yes compstate[insert]='' case $#_lastdescr in 1) str="$_lastdescr[1]";; 2) str="$_lastdescr[1] or $_lastdescr[2]";; *) str="${(j:, :)_lastdescr[1,-2]}, or $_lastdescr[-1]";; esac compadd -UX "${compconfig[warning_format]//\\%d/$str}" -n '' fi [[ "$compconfig[last_prompt]" = always ]] && compstate[last_prompt]=yes _lastcomp=( "${(@kv)compstate}" ) _lastcomp[completer]="$comp" _lastcomp[prefix]="$PREFIX" _lastcomp[suffix]="$SUFFIX" _lastcomp[iprefix]="$IPREFIX" _lastcomp[isuffix]="$ISUFFIX" _lastcomp[qiprefix]="$QIPREFIX" _lastcomp[qisuffix]="$QISUFFIX" return ret