#autoload # The main loop of the completion code. This is what is called when # completion is attempted from the command line. # # Configuration keys used: # # completer # This should be set to the names of the functions to generate the # matches separated by colons. E.g. with # # compconf completer=_complete:_correct:_approximate # # the code will first try normal completion. If that doesn't yield # any matches, correction is tried and if that doesn't yield # anything either, correcting completion is attempted. # # These completer functions are only used when this function is called # without arguments. If arguments are given, they should be names of # completer functions which will then be called. # 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 # # _set_options=("${(@f)$({ unsetopt kshoptionprint; setopt } 2>/dev/null)}") # _unset_options=("${(@f)$({ unsetopt kshoptionprint; unsetopt } 2>/dev/null)}") # # This is needed because completion function 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 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 "$comp" && return done