#autoload # This should be used to complete parameter names if you need some of the # extra options of compadd. It completes only non-local parameters. # If you specify a -g option with a pattern, the pattern will be used to # restrict the type of parameters matched. if compset -P '*:'; then _history_modifiers p return fi local i pfilt local -i nm=$compstate[nmatches] local -a expl pattern=(-g \*) normal described verbose faked fakes tmp zstyle -t ":completion:${curcontext}:parameters" prefix-needed && [[ $PREFIX != [_.]* ]] && pfilt='[^_.]' _description parameters expl parameter zparseopts -D -K -E g:=pattern if zstyle -t ":completion:${curcontext}:parameters" extra-verbose; then described=( "${(@M)${(@k)parameters[(R)$~pattern[2]~*(hideval|local|special)*]}:#$~pfilt*}" ) compadd "$@" "$expl[@]" -D described -a - described if (( $#described )); then verbose=( ${${${(f@)"$( typeset -m $described )"}/=/:}[@]//'\'/'\\'} ) _describe -t parameters parameter verbose "$@" "$expl[@]" fi normal=( "${(@M)${(@k)parameters[(R)$~pattern[2]~^(*(hideval|special)*)~*local*]}:#$~pfilt*}" ) else normal=( "${(@M)${(@k)parameters[(R)$~pattern[2]~*local*]}:#$~pfilt*}" ) fi if zstyle -a ":completion:${curcontext}:" fake-parameters tmp; then for i in "$tmp[@]"; do if [[ "$i" = *:* ]]; then faked=( "$faked[@]" "$i" ) else fakes=( "$fakes[@]" "$i" ) fi done fi compadd "$@" "$expl[@]" - "$normal[@]" "${(@)fakes:|described}" \ "${(@)${(@)${(@M)faked:#${~pattern[2]}}%%:*}:|described}" (( compstate[nmatches] > nm ))