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 <[email protected]>
---
 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

_______________________________________________
busybox mailing list
[email protected]
http://lists.busybox.net/mailman/listinfo/busybox

Reply via email to