aboutsummaryrefslogtreecommitdiff
path: root/editors/vi.c
diff options
context:
space:
mode:
authorRon Yorston <rmy@pobox.com>2021-03-25 14:21:49 +0000
committerDenys Vlasenko <vda.linux@googlemail.com>2021-03-29 12:05:53 +0200
commit776b56d774fec51e0ac3f9714adbdb2375c6bda7 (patch)
tree5ff9ef7e62eea04b8b3e6f43dc4c98cd4061563d /editors/vi.c
parent7b4c2276a89fca0dfedf73db07fbe20fff17a0de (diff)
downloadbusybox-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.c12
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