about summary refs log tree commit diff
path: root/Functions/Zle/incarg
diff options
context:
space:
mode:
Diffstat (limited to 'Functions/Zle/incarg')
-rw-r--r--Functions/Zle/incarg43
1 files changed, 43 insertions, 0 deletions
diff --git a/Functions/Zle/incarg b/Functions/Zle/incarg
new file mode 100644
index 000000000..c4b05d01f
--- /dev/null
+++ b/Functions/Zle/incarg
@@ -0,0 +1,43 @@
+# Shell function to increment an integer either under the cursor or just
+# to the left of it.  Use
+#   autoload -U incarg
+#   zle -N incarg
+#   bindkey "..." incarg
+# to define it.  For example,
+#   echo 41
+#        ^^^ cursor anywhere here
+# with incarg gives
+#   echo 42
+# with the cursor in the same place.
+#
+# A numeric argument gives a number other than 1 to add (may be negative).
+# If you're going to do it a lot with one particular number, you can set
+# the parameter incarg to that number (a numeric argument still takes
+# precedence).
+
+emulate -L zsh
+setopt extendedglob
+
+local rrest lrest num
+
+rrest=${RBUFFER##[0-9]#}
+if [[ $RBUFFER = [0-9]* ]]; then
+  if [[ -z $rrest ]]; then
+    num=$RBUFFER
+  else
+    num=${RBUFFER[1,-$#rrest-1]}
+  fi
+fi
+
+lrest=${LBUFFER%%[0-9]#}
+if [[ $LBUFFER = *[0-9] ]]; then
+  if [[ -z $lrest ]]; then
+    num="$LBUFFER$num"
+  else
+    num="${LBUFFER[$#lrest+1,-1]}$num"
+  fi
+fi
+
+[[ -n $num ]] && (( num += ${NUMERIC:-${incarg:-1}} ))
+
+BUFFER="$lrest$num$rrest"