Applied, thanks!
On Mon, Feb 11, 2019 at 9:29 AM Ron Yorston <[email protected]> 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 <[email protected]> > --- > 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 > [email protected] > http://lists.busybox.net/mailman/listinfo/busybox _______________________________________________ busybox mailing list [email protected] http://lists.busybox.net/mailman/listinfo/busybox
