summary refs log tree commit diff
path: root/Functions/Zle/forward-word-match
blob: e5b5ef3a678423bbdc9ec05f0fb9194c7b4ee5e2 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
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