[PATCH] vi: fix replacement of single character with CR
Ron Yorston
rmy at pobox.com
Sun Feb 3 14:01:58 UTC 2019
Currently if the 'r' command is followed by a carriage return a
literal CR replaces the current character.
Fix this so that:
- a new line is inserted
- the autoindent setting is respected
- the cursor is placed at the start of the new line
function old new delta
do_cmd 5052 5060 +8
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 1/0 up/down: 8/0) Total: 8 bytes
Signed-off-by: Ron Yorston <rmy at pobox.com>
---
editors/vi.c | 11 +++--------
1 file changed, 3 insertions(+), 8 deletions(-)
diff --git a/editors/vi.c b/editors/vi.c
index c6adeb311..899fcf57e 100644
--- a/editors/vi.c
+++ b/editors/vi.c
@@ -4189,14 +4189,9 @@ static void do_cmd(int c)
case 'r': // r- replace the current char with user input
c1 = get_one_char(); // get the replacement char
if (*dot != '\n') {
-#if ENABLE_FEATURE_VI_UNDO
- undo_push(dot, 1, UNDO_DEL);
- *dot = c1;
- undo_push(dot, 1, UNDO_INS_CHAIN);
-#else
- *dot = c1;
- modified_count++;
-#endif
+ dot = text_hole_delete(dot, dot, ALLOW_UNDO);
+ dot = char_insert(dot, c1, ALLOW_UNDO_CHAIN);
+ dot_left();
}
end_cmd_q(); // stop adding to q
break;
--
2.20.1
More information about the busybox
mailing list