mirror of
				git://git.code.sf.net/p/zsh/code
				synced 2025-10-31 18:10:56 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			43 lines
		
	
	
	
		
			977 B
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			43 lines
		
	
	
	
		
			977 B
		
	
	
	
		
			Text
		
	
	
	
	
	
| emulate -L zsh
 | |
| setopt extendedglob
 | |
| 
 | |
| autoload -Uz match-words-by-style
 | |
| 
 | |
| local curcontext=":zle:$WIDGET" word
 | |
| local -a matched_words
 | |
| integer count=${NUMERIC:-1}
 | |
| 
 | |
| if (( count < 0 )); then
 | |
|   (( NUMERIC = -count ))
 | |
|   zle ${WIDGET/forward/backward}
 | |
|   return
 | |
| fi
 | |
| 
 | |
| while (( count-- )); do
 | |
|   match-words-by-style
 | |
|  
 | |
|   if zstyle -t $curcontext skip-whitespace-first; then
 | |
|     # Standard non-zsh behaviour: skip leading whitespace and the word.
 | |
|     word=$matched_words[4]$matched_words[5]
 | |
|   else
 | |
|     # Traditional zsh behaviour.
 | |
|     # For some reason forward-word doesn't work like the other word
 | |
|     # commands; it skips whitespace only after any matched word
 | |
|     # characters.
 | |
|     if [[ -n $matched_words[4] ]]; then
 | |
|       # just skip the whitespace
 | |
|       word=$matched_words[4]
 | |
|     else
 | |
|       # skip the word and trailing whitespace
 | |
|       word=$matched_words[5]$matched_words[6]
 | |
|     fi
 | |
|   fi
 | |
| 
 | |
|   if [[ -n $word ]]; then
 | |
|     (( CURSOR += ${#word} ))
 | |
|   else
 | |
|     return 1
 | |
|   fi
 | |
| done
 | |
| 
 | |
| return 0
 |