about summary refs log tree commit diff
path: root/Functions/Zle/copy-earlier-word
diff options
context:
space:
mode:
Diffstat (limited to 'Functions/Zle/copy-earlier-word')
-rw-r--r--Functions/Zle/copy-earlier-word19
1 files changed, 19 insertions, 0 deletions
diff --git a/Functions/Zle/copy-earlier-word b/Functions/Zle/copy-earlier-word
new file mode 100644
index 000000000..bbc8af35c
--- /dev/null
+++ b/Functions/Zle/copy-earlier-word
@@ -0,0 +1,19 @@
+# Copy the word before the one you last copied --- call repeatedly
+# to cycle through the list of words on the history line.
+#
+# Words in combination with insert-last-word to use the line reached,
+# and start from the word before last.  Otherwise, it will operate on
+# the current line.
+
+if (( ${NUMERIC:-0} )); then
+   # 1 means last word, 2 second last, etc.
+   (( __copyword = ${NUMERIC:-0} ))
+elif [[ -n $__copyword && $WIDGET = $LASTWIDGET ]]; then
+  (( __copyword-- ))
+elif [[ $LASTWIDGET = *insert-last-word ]]; then
+  __copyword=-2
+else
+  __copyword=-1
+fi
+
+zle .insert-last-word 0 $__copyword