mirror of
git://git.code.sf.net/p/zsh/code
synced 2025-01-01 05:16:05 +01:00
5b32dece55
in widgets using forward-word-match
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
|