#compdef -command- # 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 defs=( 'commands:external command:compadd - ${(@k)commands}' 'executables:executable file or directory:_path_files -/g \*\(-\*\)' ) if [[ "$1" = -e ]]; then shift else [[ "$1" = - ]] && shift defs=( "$defs[@]" 'builtins:builtin command:compadd - ${(@k)builtins}' 'functions:shell function:compadd - ${(@k)functions}' 'aliases:alias:compadd - ${(@k)aliases}' 'reserved-words:reserved word:compadd - ${(@k)reswords}' 'jobs:: _jobs -t' 'parameters:: _parameters -qS= -r "\n\t\- =["' ) fi args=( "$@" ) _alternative -O args "$defs[@]"