about summary refs log tree commit diff
path: root/Completion/Base/Completer
diff options
context:
space:
mode:
authorSven Wischnowsky <wischnow@users.sourceforge.net>2001-04-02 11:08:37 +0000
committerSven Wischnowsky <wischnow@users.sourceforge.net>2001-04-02 11:08:37 +0000
commitad74f96ef0fd2c22dea04a9c982d0f35919aca91 (patch)
treeec16fb986354f89e2af904d62bf59d8adc5a2521 /Completion/Base/Completer
parent93b6366194e28e180527e6cf5b7352e783a71fcc (diff)
downloadzsh-ad74f96ef0fd2c22dea04a9c982d0f35919aca91.tar.gz
zsh-ad74f96ef0fd2c22dea04a9c982d0f35919aca91.tar.xz
zsh-ad74f96ef0fd2c22dea04a9c982d0f35919aca91.zip
moved from Completion/Core/_oldlist
Diffstat (limited to 'Completion/Base/Completer')
-rw-r--r--Completion/Base/Completer/_oldlist57
1 files changed, 57 insertions, 0 deletions
diff --git a/Completion/Base/Completer/_oldlist b/Completion/Base/Completer/_oldlist
new file mode 100644
index 000000000..3ece0b7ca
--- /dev/null
+++ b/Completion/Base/Completer/_oldlist
@@ -0,0 +1,57 @@
+#autoload
+
+[[ _matcher_num -gt 1 || $_lastcomp[nmatches] -eq 0 ]] && return 1
+
+local list
+
+zstyle -s ":completion:${curcontext}:" old-list list
+
+# If this is a listing widget and there is already an old list,
+# and either the style :oldlist:old-list is `always', or it is not `never'
+# and the list is not already shown, then use the existing list for listing
+# (even if it was generated by another widget).
+# Do this also if there is an old list and it was generated by the
+# completer named by the oldlist_list key.
+
+if [[ -n $compstate[old_list] && $list != never &&
+      $LASTWIDGET != _complete_help && $WIDGET != _complete_help ]]; then
+  if [[ $WIDGET = *list* && ( $list = always || $list != shown ) ]]; then
+    compstate[old_list]=keep
+    return 0
+  elif [[ $list = *${_lastcomp[completer]}* ]]; then
+    [[ "$_lastcomp[insert]" = unambig* ]] && compstate[to_end]=single
+    compstate[old_list]=keep
+    if [[ -o automenu ]]; then
+      compstate[insert]=menu
+    else
+      compadd -Qs "$SUFFIX" - "$PREFIX"
+    fi
+    return 0
+  fi
+fi
+
+# If this is a completion widget, and we have a completion inserted already,
+# and the style :oldlist:old-menu is `true', then we cycle through the
+# existing list (even if it was generated by another widget).
+
+if [[ -z $compstate[old_insert] && -n $compstate[old_list] &&
+      ( $_lastcomp[nmatches] -ne 0 || $WIDGET != $LASTWIDGET ) &&
+      $LASTWIDGET != _complete_help && $WIDGET != _complete_help ]]; then
+  compstate[old_list]=keep
+  return 0
+elif [[ $WIDGET = *complete(|-prefix|-word) ]] &&
+     zstyle -T ":completion:${curcontext}:" old-menu; then
+  if [[ -n $compstate[old_insert] ]]; then
+    compstate[old_list]=keep
+    if [[ $WIDGET = *reverse* ]]; then
+      compstate[insert]=$(( compstate[old_insert] - 1 ))
+    else
+      compstate[insert]=$(( compstate[old_insert] + 1 ))
+    fi
+  else
+    return 1
+  fi
+  return 0
+fi
+
+return 1