about summary refs log tree commit diff
path: root/Completion/Core
diff options
context:
space:
mode:
authorTanaka Akira <akr@users.sourceforge.net>2000-03-24 12:37:56 +0000
committerTanaka Akira <akr@users.sourceforge.net>2000-03-24 12:37:56 +0000
commitb0226d3cc8393bb4dd57d9e2e8f04ef885c43ab9 (patch)
tree9b9357f56affeb7e8e3c368c0396cf850ff0174b /Completion/Core
parenta2876b6db3e25ab7c5f7df10806d6f0b45b89514 (diff)
downloadzsh-b0226d3cc8393bb4dd57d9e2e8f04ef885c43ab9.tar.gz
zsh-b0226d3cc8393bb4dd57d9e2e8f04ef885c43ab9.tar.xz
zsh-b0226d3cc8393bb4dd57d9e2e8f04ef885c43ab9.zip
zsh-workers/10231
Diffstat (limited to 'Completion/Core')
-rw-r--r--Completion/Core/_tags60
1 files changed, 41 insertions, 19 deletions
diff --git a/Completion/Core/_tags b/Completion/Core/_tags
index 2dfa56f9d..a617776d4 100644
--- a/Completion/Core/_tags
+++ b/Completion/Core/_tags
@@ -16,7 +16,7 @@ if (( $# )); then
 
   # We have arguments: the tags supported in this context.
 
-  local curcontext="$curcontext" order tag nodef
+  local curcontext="$curcontext" order tag nodef tmp tmp2 tmp3 als atag
 
   if [[ "$1" = -C?* ]]; then
     curcontext="${curcontext%:*}:${1[3,-1]}"
@@ -51,7 +51,13 @@ if (( $# )); then
 
   if [[ -n "$_sort_tags" ]]; then
     "$_sort_tags" "$@"
-  elif zstyle -a ":completion:${curcontext}:" tag-order order; then
+  else
+    zstyle -a ":completion:${curcontext}:" tag-order order ||
+      if [[ "$*" = *(arguments|values)* || "$*" = *options* ]] ;then
+        order=( 'arguments values' options )
+      else
+        order=()
+      fi
 
     for tag in $order; do
       case $tag in
@@ -61,33 +67,49 @@ if (( $# )); then
                break
              fi
              ;;
-      \!*)   comptry "${(@)argv:#(${(j:|:)~${=tag[2,-1]}})}";;
-      ?*)    comptry ${${(ps: :)${tag//\\\\ /$'\0'}}//$'\0'/ };;
+      \!*)   comptry "${(@)argv:#(${(j:|:)~${=~tag[2,-1]}})}";;
+      ?*)    tmp=( ${${(s: :)${tag//\\\\ /$'\0'}}//$'\0'/ } ) tmp2=() tmp3=()
+             for tag in "$tmp[@]"; do
+	       if [[ "$tag" = *:* ]]; then
+	         tmp2=( "$tmp2[@]" "${(@M)^argv:#${~tag%%:*}}:${tag#*:}" )
+	       else
+	         for atag in "${(@M)argv:#${~tag}}"; do
+	           if zstyle -a ":completion:${curcontext}:${atag}" tag-aliases als; then
+		     tmp3=( "$tmp3[@]" "$als[@]" )
+		     tmp=( "${(@)tmp:#${atag}}" )
+                   else
+	             tmp2=( "$tmp2[@]" "$atag" )
+		   fi
+		 done
+	       fi
+	     done
+
+	     comptry "${(@)tmp2:#(${(j:|:)~${(q)tmp%%:*}})}" "$tmp3[@]" "$tmp[@]"
+	     ;;
       esac
     done
 
     if [[ -z "$nodef" ]]; then
       if (( $+_comp_default_tags )); then
         for tag in "$_comp_default_tags[@]"; do
-          comptry "$tag"
+	  if zstyle -a ":completion:${curcontext}:${tag}" tag-aliases als; then
+            comptry "$als[@]"
+          else
+            comptry "$tag"
+	  fi
         done
       else
-        comptry "$@"
+        tmp2=()
+	for tag; do
+	  if zstyle -a ":completion:${curcontext}:${tag}" tag-aliases als; then
+	    tmp2=( "$tmp2[@]" "$als[@]" )
+          else
+	    tmp2=( "$tmp2[@]" "$tag" )
+	  fi
+	done
+        comptry "$tmp2[@]"
       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.