diff options
author | Ron Yorston <rmy@pobox.com> | 2021-03-25 14:21:49 +0000 |
---|---|---|
committer | Denys Vlasenko <vda.linux@googlemail.com> | 2021-03-29 12:05:53 +0200 |
commit | 776b56d774fec51e0ac3f9714adbdb2375c6bda7 (patch) | |
tree | 5ff9ef7e62eea04b8b3e6f43dc4c98cd4061563d /editors/vi.c | |
parent | 7b4c2276a89fca0dfedf73db07fbe20fff17a0de (diff) | |
download | busybox-w32-776b56d774fec51e0ac3f9714adbdb2375c6bda7.tar.gz busybox-w32-776b56d774fec51e0ac3f9714adbdb2375c6bda7.tar.bz2 busybox-w32-776b56d774fec51e0ac3f9714adbdb2375c6bda7.zip |
vi: code shrink
I was puzzled by code in find_range() which handles forward word
movement. It included a test to see if we're at the start of a
word. Since these are forward word movements surely we'd expect to
be at the start of a word? In fact, the test was intended to fix a
problem with changes to the last word in a file, as discussed in the
thread starting here:
http://lists.busybox.net/pipermail/busybox/2004-January/044552.html
The code can be simplified by testing directly for end of file instead
of indirectly for not being at the start of a word. Since trailing
whitespace is now handled in do_cmd() the code to back up off a newline
is no longer required.
function old new delta
find_range 619 514 -105
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 0/1 up/down: 0/-105) Total: -105 bytes
Signed-off-by: Ron Yorston <rmy@pobox.com>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
Diffstat (limited to 'editors/vi.c')
-rw-r--r-- | editors/vi.c | 12 |
1 files changed, 3 insertions, 9 deletions
diff --git a/editors/vi.c b/editors/vi.c index 1bc2d08ad..7a7247c10 100644 --- a/editors/vi.c +++ b/editors/vi.c | |||
@@ -3021,15 +3021,9 @@ static int find_range(char **start, char **stop, char c) | |||
3021 | q = dot; | 3021 | q = dot; |
3022 | } else if (strchr("wW", c)) { | 3022 | } else if (strchr("wW", c)) { |
3023 | do_cmd(c); // execute movement cmd | 3023 | do_cmd(c); // execute movement cmd |
3024 | // if we are at the next word's first char | 3024 | // step back one char, but not if we're at end of file |
3025 | // step back one char | 3025 | if (dot > p && !((dot == end - 2 && end[-1] == '\n') || dot == end - 1)) |
3026 | // but check the possibilities when it is true | 3026 | dot--; |
3027 | if (dot > text && ((isspace(dot[-1]) && !isspace(dot[0])) | ||
3028 | || (ispunct(dot[-1]) && !ispunct(dot[0])) | ||
3029 | || (isalnum(dot[-1]) && !isalnum(dot[0])))) | ||
3030 | dot--; // move back off of next word | ||
3031 | if (dot > text && *dot == '\n') | ||
3032 | dot--; // stay off NL | ||
3033 | q = dot; | 3027 | q = dot; |
3034 | } else if (strchr("H-k{", c) || (c == 'G' && !forward)) { | 3028 | } else if (strchr("H-k{", c) || (c == 'G' && !forward)) { |
3035 | // these operate on multi-lines backwards | 3029 | // these operate on multi-lines backwards |