[PATCH] vi: fix replacement of single character with CR
Denys Vlasenko
vda.linux at googlemail.com
Fri Feb 8 12:03:36 UTC 2019
Applied, thanks!
On Sun, Feb 3, 2019 at 3:02 PM Ron Yorston <rmy at pobox.com> wrote:
>
> 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
>
> _______________________________________________
> busybox mailing list
> busybox at busybox.net
> http://lists.busybox.net/mailman/listinfo/busybox
More information about the busybox
mailing list