about summary refs log tree commit diff
path: root/Functions
diff options
context:
space:
mode:
authorTanaka Akira <akr@users.sourceforge.net>1999-09-13 16:32:31 +0000
committerTanaka Akira <akr@users.sourceforge.net>1999-09-13 16:32:31 +0000
commit483cb415f16a48bfbc605c4971f75317cbe59132 (patch)
tree879324dcc935b9dd455eb0e28d70f8d73805a5f9 /Functions
parentb6b523265568675955c57ad6762487b38f066df9 (diff)
downloadzsh-483cb415f16a48bfbc605c4971f75317cbe59132.tar.gz
zsh-483cb415f16a48bfbc605c4971f75317cbe59132.tar.xz
zsh-483cb415f16a48bfbc605c4971f75317cbe59132.zip
zsh-users/2598
Diffstat (limited to 'Functions')
-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"