summary refs log tree commit diff
path: root/Functions/Zle/cycle-completion-positions
diff options
context:
space:
mode:
Diffstat (limited to 'Functions/Zle/cycle-completion-positions')
-rw-r--r--Functions/Zle/cycle-completion-positions16
1 files changed, 16 insertions, 0 deletions
diff --git a/Functions/Zle/cycle-completion-positions b/Functions/Zle/cycle-completion-positions
new file mode 100644
index 000000000..34a2d8174
--- /dev/null
+++ b/Functions/Zle/cycle-completion-positions
@@ -0,0 +1,16 @@
+# This may be called after a completion that inserted the unambiguous
+# (i.e. non-menu- and non-single-match-) string into the command line.
+# If there are multiple positions in the string with missing or differing
+# characters, repeatedly calling this widget cycles between all these
+# positions.
+
+emulate -L zsh
+setopt extendedglob
+
+local p="$_lastcomp[insert_positions]"
+
+if [[ $p = ((#s)|*:)${CURSOR}:* ]]; then
+  CURSOR=${${p#(|*:)${CURSOR}:}%%:*}
+elif [[ -n $p ]]; then
+  CURSOR=${p%%:*}
+fi