From 30a63e829cc869a2581ab8c4a5a5fb40b00c7b25 Mon Sep 17 00:00:00 2001 From: Tanaka Akira Date: Wed, 3 Nov 1999 13:47:42 +0000 Subject: Initial revision --- Completion/Core/_tags | 81 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100644 Completion/Core/_tags diff --git a/Completion/Core/_tags b/Completion/Core/_tags new file mode 100644 index 000000000..af8dc21dd --- /dev/null +++ b/Completion/Core/_tags @@ -0,0 +1,81 @@ +#autoload + +if (( $# )); then + local cmd="$words[1]" func="$funcstack[2]" defs i tags tag pat style prio + + while getopts 'c:f:' i; do + if [[ "$i" = c ]]; then + cmd="$OPTARG" + else + func="$OPTARG" + fi + done + + shift OPTIND-1 + + defs=( "${(@M)argv:#${(kj:|:)~override_tags[(R)(|+*)]}}" ) + (( $#defs )) && set -- "$defs[@]" + + _offered_tags=( "$_offered_tags[@]" "$@" ) + _last_tags=() + + defs=() + for i; do + if [[ -n ${override_tags[$i]} && ${override_tags[$i]} != (\[|+\[)* ]]; then + if [[ ${override_tags[$i]} = *\[* ]]; then + prio=( "${i}:*=${override_tags[$i]#+}" ) + else + prio=( "${i}:${(@v)^comptags[(I)(|*:)${i}(|:*)]}" ) + (( $#prio )) || prio=( "${i}:${comptags[any]}" ) + prio="${${${prio[(r)(|*:)\*=[^:]#\[*\](|:*)]}##(|*:)\*}%%:*}" + prio=( "${i}:*=${override_tags[$i]#+}${(M)prio%%\[*\]}" ) + fi + else + prio=( "${i}:${(@v)^comptags[(I)(|*:)${i}(|:*)]}" ) + (( $#prio )) || prio=( "${i}:${comptags[any]}" ) + fi + defs=( "$defs[@]" "$prio[@]" ) + done + + tags=() + for i in "$defs[@]"; do + tag="${i%%:*}" + for pat in "${(s.:.)i#*:}"; do + if [[ ( "$pat" = _* && "$func" = ${~pat%%\=*} ) || + "$cmd" = ${~pat%%\=*} ]]; then + prio="${pat#*\=}" + [[ "$prio" = -* ]] && continue 2 + + if [[ "$prio" = *\[*\] ]]; then + style="${(M)prio%%\[*}" + prio="${prio%%\[*}" + else + style='' + fi + [[ ${override_tags[$tag]} = (|+)\[* ]] && + style="${override_tags[$tag]#+}" + + (( prio++ )) + + tags[$prio]="${tags[$prio]}:${tag}${style}" + break + fi + done + done + + prios=( "${(@)tags:#}" ) + + return 0 +fi + +_failed_tags=( "$_failed_tags[@]" "$_last_tags[@]" ) + +(( $#prios )) || return 1 + +tags="${prios[1]}:" +shift 1 prios + +_last_tags=( "${(@s.:.)${${tags#:}%:}}" ) +_tried_tags=( "$_tried_tags[@]" "$_last_tags[@]" ) + +return 0 -- cgit 1.4.1