about summary refs log tree commit diff
path: root/Completion/Core/_main_complete
diff options
context:
space:
mode:
authorTanaka Akira <akr@users.sourceforge.net>2000-02-17 10:59:46 +0000
committerTanaka Akira <akr@users.sourceforge.net>2000-02-17 10:59:46 +0000
commit0e3f4cecde90d9c07bfae1a9d522b285bcc8d6a3 (patch)
treefcd47ed650a154650b9c11111338fed7ab22932e /Completion/Core/_main_complete
parentf82d790d908588684a9f19ace5523a033f0cde99 (diff)
downloadzsh-0e3f4cecde90d9c07bfae1a9d522b285bcc8d6a3.tar.gz
zsh-0e3f4cecde90d9c07bfae1a9d522b285bcc8d6a3.tar.xz
zsh-0e3f4cecde90d9c07bfae1a9d522b285bcc8d6a3.zip
zsh-workers/9772
Diffstat (limited to 'Completion/Core/_main_complete')
-rw-r--r--Completion/Core/_main_complete27
1 files changed, 18 insertions, 9 deletions
diff --git a/Completion/Core/_main_complete b/Completion/Core/_main_complete
index 3f71e2554..dc546d763 100644
--- a/Completion/Core/_main_complete
+++ b/Completion/Core/_main_complete
@@ -20,7 +20,8 @@ setopt localoptions nullglob rcexpandparam extendedglob
 unsetopt markdirs globsubst shwordsplit nounset ksharrays
 
 local comp post ret=1 _compskip format _comp_ignore \
-      _completers _completers_left _comp_matcher \
+      _completers _completer _completer_num \
+      _matchers _matcher _matcher_num \
       context state line opt_args val_args curcontext="$curcontext" \
       _last_nmatches=-1 _last_menu_style _def_menu_style _menu_style sel \
       _saved_exact="${compstate[exact]}" \
@@ -62,14 +63,22 @@ _last_menu_style=()
 # And now just call the completer functions defined.
 
 _completers=( "$@" )
-_completers_left=( "$@" )
-
-for comp; do
-  if "$comp"; then
-    ret=0
-    break;
-  fi
-  shift 1 _completers_left
+_completer_num=1
+
+for _completer; do
+  _matcher="${_completer[2,-1]}-${(M)#_completers[1,_completer_num]:#$_completer}"
+  zstyle -a ":completion:${curcontext/::/:${_matcher}:}:" matcher-list _matchers ||
+      _matchers=( '' )
+
+  _matcher_num=1
+  for _matcher in "$_matchers[@]"; do
+    if "$_completer"; then
+      ret=0
+      break 2
+    fi
+    (( _matcher_num++ ))
+  done
+  (( _completer_num++ ))
 done
 
 if [[ $compstate[nmatches] -gt 1 ]]; then