mirror of
git://git.code.sf.net/p/zsh/code
synced 2024-11-19 13:33:52 +01:00
44 lines
1001 B
Plaintext
44 lines
1001 B
Plaintext
|
# 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"
|