[prev in list] [next in list] [prev in thread] [next in thread]
List: busybox
Subject: Re: [PATCH] vi: further fixes to undo after autoindent
From: Denys Vlasenko <vda.linux () googlemail ! com>
Date: 2019-02-11 10:48:40
Message-ID: CAK1hOcNkz-GkTz_+uF7Rxxp3aDJyzi6UtDG5ixnuHizYLSzPZA () mail ! gmail ! com
[Download RAW message or body]
Applied, thanks!
On Mon, Feb 11, 2019 at 9:29 AM Ron Yorston <rmy@pobox.com> wrote:
>
> Commit bb983f30e (vi: fix faulty undo after autoinsert) has a
> number of problems:
>
> - The commit message refers to 'autoinsert' when it really means
> 'autoindent'.
>
> - The indentation of undo_push_insert() was incorrect.
>
> - Most seriously the commit only fixed the problem for cases where
> the indentation was exactly one character. This is because undo_push()
> only allows single characters to be queued for UNDO_INS_QUEUED.
>
> Lifting this restriction allows the example given in the previous
> commit message (with a three character indent) to work.
>
> function old new delta
> undo_push 406 435 +29
> ------------------------------------------------------------------------------
> (add/remove: 0/0 grow/shrink: 1/0 up/down: 29/0) Total: 29 bytes
>
> Signed-off-by: Ron Yorston <rmy@pobox.com>
> ---
> editors/vi.c | 28 +++++++++++++++-------------
> 1 file changed, 15 insertions(+), 13 deletions(-)
>
> diff --git a/editors/vi.c b/editors/vi.c
> index 899fcf57e..065a1068e 100644
> --- a/editors/vi.c
> +++ b/editors/vi.c
> @@ -2314,16 +2314,18 @@ static void undo_push(char *src, unsigned int length, \
> uint8_t u_type) // Add to }
> break;
> case UNDO_INS_QUEUED:
> - if (length != 1)
> + if (length < 1)
> return;
> switch (undo_queue_state) {
> case UNDO_EMPTY:
> undo_queue_state = UNDO_INS;
> undo_queue_spos = src;
> case UNDO_INS:
> - undo_q++; // Don't need to save any data for \
> insertions
> - if (undo_q == CONFIG_FEATURE_VI_UNDO_QUEUE_MAX)
> - undo_queue_commit();
> + while (length--) {
> + undo_q++; // Don't need to save any data for \
> insertions + if (undo_q == \
> CONFIG_FEATURE_VI_UNDO_QUEUE_MAX) + \
> undo_queue_commit(); + }
> return;
> case UNDO_DEL:
> // Switch from storing deleted text to inserted text
> @@ -2372,16 +2374,16 @@ static void undo_push(char *src, unsigned int length, \
> uint8_t u_type) // Add to static void undo_push_insert(char *p, int len, int \
> undo) {
> switch (undo) {
> - case ALLOW_UNDO:
> - undo_push(p, len, UNDO_INS);
> - break;
> - case ALLOW_UNDO_CHAIN:
> - undo_push(p, len, UNDO_INS_CHAIN);
> - break;
> + case ALLOW_UNDO:
> + undo_push(p, len, UNDO_INS);
> + break;
> + case ALLOW_UNDO_CHAIN:
> + undo_push(p, len, UNDO_INS_CHAIN);
> + break;
> # if ENABLE_FEATURE_VI_UNDO_QUEUE
> - case ALLOW_UNDO_QUEUED:
> - undo_push(p, len, UNDO_INS_QUEUED);
> - break;
> + case ALLOW_UNDO_QUEUED:
> + undo_push(p, len, UNDO_INS_QUEUED);
> + break;
> # endif
> }
> }
> --
> 2.20.1
>
> _______________________________________________
> busybox mailing list
> busybox@busybox.net
> http://lists.busybox.net/mailman/listinfo/busybox
_______________________________________________
busybox mailing list
busybox@busybox.net
http://lists.busybox.net/mailman/listinfo/busybox
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic