diff options
author | Simon Ruderich <simon@ruderich.org> | 2010-09-26 22:34:56 +0000 |
---|---|---|
committer | Simon Ruderich <simon@ruderich.org> | 2010-09-26 22:34:56 +0000 |
commit | 375b559ea9f085bd0a2586a5e9f71b41438755b2 (patch) | |
tree | f4ee3f66ed5aebb0d1468afffb96e7c4e328b39d /vim-mode/vim_mode.pl | |
parent | vim_mode: Fix my nick. (diff) | |
download | irssi-scripts-375b559ea9f085bd0a2586a5e9f71b41438755b2.tar.gz irssi-scripts-375b559ea9f085bd0a2586a5e9f71b41438755b2.zip |
vim_mode: Correctly handle multiple whitespace between words.
Thanks to SvenG for reporting this bug.
Diffstat (limited to 'vim-mode/vim_mode.pl')
-rw-r--r-- | vim-mode/vim_mode.pl | 21 |
1 files changed, 10 insertions, 11 deletions
diff --git a/vim-mode/vim_mode.pl b/vim-mode/vim_mode.pl index be71e75..d1dde46 100644 --- a/vim-mode/vim_mode.pl +++ b/vim-mode/vim_mode.pl @@ -410,12 +410,11 @@ sub cmd_movement_W { my ($count, $pos) = @_; my $input = _input(); - while ($count-- > 0) { - $pos = index $input, ' ', $pos + 1; - if ($pos == -1) { + while ($count-- > 0 and length($input) > $pos) { + if (substr($input, $pos + 1) !~ /\s+/) { return cmd_movement_dollar(); } - $pos++; + $pos += $+[0] + 1; } _input_pos($pos); } @@ -444,19 +443,19 @@ sub cmd_movement_E { sub _end_of_WORD { my ($input, $count, $pos) = @_; - # We are already at the end of one a word, ignore the following space so - # we can skip over it. - if (index $input, ' ', $pos + 1 == $pos + 1) { - $pos++; + # We are inside a word, skip to the end of it. + if (substr($input, $pos + 1) =~ /^\S+(\s)/) { + $pos += $-[1]; + $count--; } while ($count-- > 0) { - $pos = index $input, ' ', $pos + 1; - if ($pos == -1) { + if (substr($input, $pos) !~ /\s+\S+(\s+)/) { return -1; } + $pos += $-[1] - 1; } - return $pos - 1; + return $pos; } sub cmd_movement_0 { |