#compdef -value- -array-value- -T values -default- # You can customize completion for different parameters by writing # functions with the tag-line `#compdef -T value '. # The function searches for the strings `:' # and `'. If the line contains a command (as in `make foo=') # the string `::' is also searched for. if [[ "$service" != -default- ]]; then local strs type type="${(Pt)compstate[parameter]}" if [[ -z "$type" ]]; then if [[ "$compstate[parameter]" = *-* ]]; then type=association-value elif [[ "$compstate[context]" = value ]]; then type=scalar else type=array fi fi strs=( "${compstate[parameter]}:$type" "$compstate[parameter]" ) if [[ "$compstate[context]" != *value && -n "$_comp_command1" ]]; then strs=( "${_comp_command1}:$^strs[@]" "$strs[@]" ) [[ -n "$_comp_command2" ]] && strs=( "${_comp_command2}:${(@)^strs[-2,-1]}" "$strs[@]" ) fi _dispatch -d values "$strs[@]" else if [[ "$compstate[parameter]" != *-* && "$compstate[context]" = *value && "${(Pt)${compstate[parameter]}}" = assoc* ]]; then if (( CURRENT & 1 )); then _wanted association-keys expl 'association key' \ compadd -k "$compstate[parameter]" else compstate[parameter]="${compstate[parameter]}-${words[CURRENT-1]}" _value "$@" fi else local pats if { zstyle -a ":completion:${curcontext}:" assign-list pats && [[ "$compstate[parameter]" = (${(j:|:)~pats}) ]] } || [[ "$PREFIX$SUFFIX" = *:* ]]; then compset -P '*:' compset -S ':*' _default -r '\-\n\t /:' "$@" else _default "$@" fi fi fi