#autoload # The option `-e' if given as the first argument says that we should # complete only external commands and executable files. This and a # `-' as the first argument is then removed from the arguments. local args defs ffilt zstyle -t ":completion:${curcontext}:commands" rehash && rehash zstyle -t ":completion:${curcontext}:functions" prefix-needed && \ [[ $PREFIX != [_.]* ]] && \ ffilt='[(I)[^_.]*]' defs=( 'commands:external command:_path_commands' ) [[ -n "$path[(r).]" || $PREFIX = */* ]] && defs+=( 'executables:executable file:_files -g \*\(-\*\)' ) if [[ "$1" = -e ]]; then shift elif (( ${#precommands:|builtin_precommands} )); then # precommand excludes internal options below else [[ "$1" = - ]] && shift defs=( "$defs[@]" 'builtins:builtin command:compadd -Qk builtins' "functions:shell function:compadd -k 'functions$ffilt'" 'aliases:alias:compadd -Qk aliases' 'suffix-aliases:suffix alias:_suffix_alias_files' 'reserved-words:reserved word:compadd -Qk reswords' 'jobs:: _jobs -t' 'parameters:: _parameters -g "^*(readonly|association)*" -qS= -r "\n\t\- =[+"' 'parameters:: _parameters -g "*association*~*readonly*" -qS\[ -r "\n\t\- =[+"' ) fi args=( "$@" ) local -a cmdpath if zstyle -a ":completion:${curcontext}" command-path cmdpath && [[ $#cmdpath -gt 0 ]] then local -a +h path local -A +h commands path=( $cmdpath ) fi _alternative -O args "$defs[@]"