mirror of
				git://git.code.sf.net/p/zsh/code
				synced 2025-10-31 06:00:54 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			43 lines
		
	
	
	
		
			1,002 B
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			43 lines
		
	
	
	
		
			1,002 B
		
	
	
	
		
			Text
		
	
	
	
	
	
| # Shell function to increment an integer either under the cursor or just
 | |
| # to the left of it.  Use
 | |
| #   autoload -Uz 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"
 |