mirror of
git://git.code.sf.net/p/zsh/code
synced 2026-01-20 14:21:10 +01:00
57 lines
1.7 KiB
Text
57 lines
1.7 KiB
Text
#compdef -value- -array-value- -T values -default-
|
|
|
|
# You can customize completion for different parameters by writing
|
|
# functions with the tag-line `#compdef -T value <name>'.
|
|
# The function searches for the strings `<param-name>:<param-type>'
|
|
# and `<param-name>'. If the line contains a command (as in `make foo=<TAB>')
|
|
# the string `<command>:<param-name>:<param-type>' 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
|