#autoload if (( $# )); then # We have arguments: the tags supported in this context. local curcontext="$curcontext" order tag nodef if [[ "$1" = -C?* ]]; then curcontext="${curcontext%:*}:${1[3,-1]}" shift elif [[ "$1" = -C ]]; then curcontext="${curcontext%:*}:${2}" shift 2 else targs=() fi [[ "$1" = -(|-) ]] && shift if zstyle -a ":completion:${curcontext}:" group-order order; then local name for name in "$order[@]"; do compadd -J "$name" compadd -V "$name" compadd -J "$name" -1 compadd -V "$name" -1 compadd -J "$name" -2 compadd -V "$name" -2 done fi # Set and remember offered tags. comptags -i "$curcontext" "$@" # Sort the tags. if [[ -n "$_sort_tags" ]]; then "$_sort_tags" "$@" elif zstyle -a ":completion:${curcontext}:" tag-order order; then for tag in $order; do case $tag in -) nodef=yes;; *\(\)) if ! "${${tag%%[ ]#\(\)}##[ ]#}" "$@"; then nodef=yes break fi ;; \!*) comptry "${(@)argv:#(${(j:|:)~${=tag[2,-1]}})}";; ?*) comptry ${${(ps: :)${tag//\\\\ /$'\0'}}//$'\0'/ };; esac done if [[ -z "$nodef" ]]; then if (( $+_comp_default_tags )); then for tag in "$_comp_default_tags[@]"; do comptry "$tag" done else comptry "$@" fi fi else # Use default tags... if (( $+_comp_default_tags )); then for tag in "$_comp_default_tags[@]"; do comptry "$tag" done else comptry arguments values comptry options fi comptry "$@" fi # Return non-zero if at least one set of tags should be used. comptags -T return fi # The other mode: switch to the next set of tags. comptags -N