aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRon Yorston <rmy@pobox.com>2021-05-20 08:26:47 +0100
committerDenys Vlasenko <vda.linux@googlemail.com>2021-06-02 06:16:36 +0200
commitd95f89ec576c5a0ecba24ead7f012f1fd8ea7b9b (patch)
treefd9f5edf65f74dc73df6e447da60b724e80041af
parentf193aeac1fe27c94d0f0b27314777df41480feb6 (diff)
downloadbusybox-w32-d95f89ec576c5a0ecba24ead7f012f1fd8ea7b9b.tar.gz
busybox-w32-d95f89ec576c5a0ecba24ead7f012f1fd8ea7b9b.tar.bz2
busybox-w32-d95f89ec576c5a0ecba24ead7f012f1fd8ea7b9b.zip
vi: make cursor positioning more vi compatible
Commit 24effc7a3 (vi: cursor positioning after whole-line 'y') tried to save a few bytes by treating whole-line deletion the same as whole-line yank. If the deletion removed the last lines of the file the cursor was left beyond the end of the file. Revert the part of the commit related to whole-line deletion. Position the cursor on the first non-whitespace character of the line when whole lines are 'put'. function old new delta do_cmd 4759 4781 +22 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 1/0 up/down: 22/0) Total: 22 bytes Signed-off-by: Ron Yorston <rmy@pobox.com> Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
-rw-r--r--editors/vi.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/editors/vi.c b/editors/vi.c
index 4a7f8c3c2..c4f3b9660 100644
--- a/editors/vi.c
+++ b/editors/vi.c
@@ -3717,6 +3717,7 @@ static void do_cmd(int c)
3717# endif 3717# endif
3718 } while (--cmdcnt > 0); 3718 } while (--cmdcnt > 0);
3719 dot += cnt; 3719 dot += cnt;
3720 dot_skip_over_ws();
3720# if ENABLE_FEATURE_VI_YANKMARK && ENABLE_FEATURE_VI_VERBOSE_STATUS 3721# if ENABLE_FEATURE_VI_YANKMARK && ENABLE_FEATURE_VI_VERBOSE_STATUS
3721 yank_status("Put", p, i); 3722 yank_status("Put", p, i);
3722# endif 3723# endif
@@ -4172,6 +4173,9 @@ static void do_cmd(int c)
4172 if (dot != (end-1)) { 4173 if (dot != (end-1)) {
4173 dot_prev(); 4174 dot_prev();
4174 } 4175 }
4176 } else if (c == 'd') {
4177 dot_begin();
4178 dot_skip_over_ws();
4175 } else { 4179 } else {
4176 dot = save_dot; 4180 dot = save_dot;
4177 } 4181 }