about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--Completion/Base/Core/_tags66
1 files changed, 66 insertions, 0 deletions
diff --git a/Completion/Base/Core/_tags b/Completion/Base/Core/_tags
new file mode 100644
index 000000000..0af8d74d2
--- /dev/null
+++ b/Completion/Base/Core/_tags
@@ -0,0 +1,66 @@
+#autoload
+
+local prev
+
+# A `--' as the first argument says that we should tell comptags to use
+# the preceding function nesting level. This is only documented here because
+# if everythings goes well, users won't have to worry about it and should
+# not mess with it.
+
+if [[ "$1" = -- ]]; then
+  prev=-
+  shift
+fi
+
+if (( $# )); then
+
+  # We have arguments: the tags supported in this context.
+
+  local curcontext="$curcontext" order tag nodef tmp
+
+  if [[ "$1" = -C?* ]]; then
+    curcontext="${curcontext%:*}:${1[3,-1]}"
+    shift
+  elif [[ "$1" = -C ]]; then
+    curcontext="${curcontext%:*}:${2}"
+    shift 2
+  fi
+
+  [[ "$1" = -(|-) ]] && shift
+
+  zstyle -a ":completion:${curcontext}:" group-order order &&
+      compgroups "$order[@]"
+
+  # Set and remember offered tags.
+
+  comptags "-i$prev" "$curcontext" "$@"
+
+  # Sort the tags.
+
+  if [[ -n "$_sort_tags" ]]; then
+    "$_sort_tags" "$@"
+  else
+    zstyle -a ":completion:${curcontext}:" tag-order order ||
+        order=('(|*-)argument-* (|*-)option-* values' options)
+
+    for tag in $order; do
+      case $tag in
+      -)     nodef=yes;;
+      \!*)   comptry "${(@)argv:#(${(j:|:)~${=~tag[2,-1]}})}";;
+      ?*)    comptry -m "$tag";;
+      esac
+    done
+
+    [[ -z "$nodef" ]] && comptry "$@"
+  fi
+
+  # Return non-zero if at least one set of tags should be used.
+
+  comptags "-T$prev"
+
+  return
+fi
+
+# The other mode: switch to the next set of tags.
+
+comptags "-N$prev"