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:30:19 +0000
committerTanaka Akira <akr@users.sourceforge.net>1999-09-13 16:30:19 +0000
commite712b19c33d8cf0c332aa29a670a6fb47df2bdfc (patch)
treefe8d29f3ce03692d562f28498381f80a71ccfd90 /Functions
parent7605a5302689c92d838e0617c74c31da455df238 (diff)
downloadzsh-e712b19c33d8cf0c332aa29a670a6fb47df2bdfc.tar.gz
zsh-e712b19c33d8cf0c332aa29a670a6fb47df2bdfc.tar.xz
zsh-e712b19c33d8cf0c332aa29a670a6fb47df2bdfc.zip
Initial revision
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"