about summary refs log tree commit diff
path: root/Completion/Base
diff options
context:
space:
mode:
authorPaul Ackersviller <packersv@users.sourceforge.net>2007-11-05 03:28:03 +0000
committerPaul Ackersviller <packersv@users.sourceforge.net>2007-11-05 03:28:03 +0000
commitb2c0cbbc1a2cc8b28d3d8d4f0c94e2ef41f8d7cd (patch)
tree2e108022a5048f0c51f6a81d4f8da95252d1157c /Completion/Base
parent6f2f15ae31a4fb82b5cbb45edb90787943cf2f75 (diff)
downloadzsh-b2c0cbbc1a2cc8b28d3d8d4f0c94e2ef41f8d7cd.tar.gz
zsh-b2c0cbbc1a2cc8b28d3d8d4f0c94e2ef41f8d7cd.tar.xz
zsh-b2c0cbbc1a2cc8b28d3d8d4f0c94e2ef41f8d7cd.zip
Merge of users/10989: add fake-always style that overrides ignored-patterns.
Diffstat (limited to 'Completion/Base')
-rw-r--r--Completion/Base/Core/_description108
1 files changed, 108 insertions, 0 deletions
diff --git a/Completion/Base/Core/_description b/Completion/Base/Core/_description
new file mode 100644
index 000000000..593369a0a
--- /dev/null
+++ b/Completion/Base/Core/_description
@@ -0,0 +1,108 @@
+#autoload
+
+local name gropt nopt xopt format gname hidden hide match opts tag sort
+
+opts=()
+
+gropt=(-J)
+xopt=(-X)
+nopt=()
+zparseopts -K -D -a nopt 1 2 V=gropt J=gropt x=xopt
+
+3="${${3##[[:blank:]]#}%%[[:blank:]]#}"
+[[ -n "$3" ]] && _lastdescr=( "$_lastdescr[@]" "$3" )
+
+zstyle -s ":completion:${curcontext}:$1" group-name gname &&
+    [[ -z "$gname" ]] && gname="$1"
+
+_setup "$1" "${gname:--default-}"
+
+name="$2"
+
+zstyle -s ":completion:${curcontext}:$1" format format ||
+    zstyle -s ":completion:${curcontext}:descriptions" format format
+
+if zstyle -s ":completion:${curcontext}:$1" hidden hidden &&
+   [[ "$hidden" = (all|yes|true|1|on) ]]; then
+  [[ "$hidden" = all ]] && format=''
+  opts=(-n)
+fi
+zstyle -s ":completion:${curcontext}:$1" matcher match &&
+    opts=($opts -M "$match")
+[[ -n "$_matcher" ]] && opts=($opts -M "$_matcher")
+
+# Use sort style, but ignore `menu' value to help _expand.
+# Also don't override explicit use of -V.
+if { zstyle -s ":completion:${curcontext}:$1" sort sort ||
+     zstyle -s ":completion:${curcontext}:" sort sort; } &&
+    [[ "$gropt" = -J && $sort != menu ]]; then
+    if [[ "$sort" = (yes|true|1|on) ]]; then
+	gropt=(-J)
+    else
+	gropt=(-V)
+    fi
+fi
+
+if [[ -z "$_comp_no_ignore" ]]; then
+  zstyle -a ":completion:${curcontext}:$1" ignored-patterns _comp_ignore ||
+    _comp_ignore=()
+
+  zstyle -s ":completion:${curcontext}:$1" ignore-line hidden &&
+    case "$hidden" in
+    true|yes|on|1) _comp_ignore=( "$_comp_ignore[@]" "$words[@]" );;
+    current)       _comp_ignore=( "$_comp_ignore[@]" "$words[CURRENT]" );;
+    current-shown) [[ "$compstate[old_list]" = *shown* ]] &&
+                       _comp_ignore=( "$_comp_ignore[@]" "$words[CURRENT]" );;
+    other)         _comp_ignore=( "$_comp_ignore[@]"
+                                  "${(@)words[1,CURRENT-1]}"
+				  "${(@)words[CURRENT+1,-1]}" );;
+    esac
+
+  # Ensure the ignore option is first so we can override it
+  # for fake-always.
+  (( $#_comp_ignore )) && opts=( -F _comp_ignore $opts )
+else
+  _comp_ignore=()
+fi
+
+tag="$1"
+
+shift 2
+if [[ -z "$1" && $# -eq 1 ]]; then
+  format=
+elif [[ -n "$format" ]]; then
+  zformat -f format "$format" "d:$1" "${(@)argv[2,-1]}"
+fi
+
+if [[ -n "$gname" ]]; then
+  if [[ -n "$format" ]]; then
+    set -A "$name" "$opts[@]" "$nopt[@]" "$gropt" "$gname" "$xopt" "$format"
+  else
+    set -A "$name" "$opts[@]" "$nopt[@]" "$gropt" "$gname"
+  fi
+else
+  if [[ -n "$format" ]]; then
+    set -A "$name" "$opts[@]" "$nopt[@]" "$gropt" -default- "$xopt" "$format"
+  else
+    set -A "$name" "$opts[@]" "$nopt[@]" "$gropt" -default-
+  fi
+fi
+
+if ! (( ${funcstack[2,-1][(I)_description]} )); then
+  local fakestyle descr
+  for fakestyle in fake fake-always; do
+    zstyle -a ":completion:${curcontext}:$tag" $fakestyle match ||
+    continue
+
+    descr=( "${(@M)match:#*[^\\]:*}" )
+
+    opts=("${(@P)name}")
+    if [[ $fakestyle = fake-always && $opts[1,2] = "-F _comp_ignore" ]]; then
+      shift 2 opts
+    fi
+    compadd "${(@)opts}" - "${(@)${(@)match:#*[^\\]:*}:s/\\:/:/}"
+    (( $#descr )) && _describe -t "$tag" '' descr "${(@)opts}"
+  done
+fi
+
+return 0