vi: don't move cursor when yanking whole lines

When whole lines are yanked using 'yy' or 'Y' vi doesn't change the
cursor position.  Make BusyBox vi do the same.

function                                             old     new   delta
do_cmd                                              4776    4786     +10
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 1/0 up/down: 10/0)               Total: 10 bytes

Signed-off-by: Ron Yorston <rmy@pobox.com>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
Ron Yorston 2021-04-15 12:03:22 +01:00 committed by Denys Vlasenko
parent 38ae0f3e3e
commit d6e653d667

View File

@ -3934,6 +3934,7 @@ static void do_cmd(int c)
# endif # endif
if (c == 'y' || c == 'Y') if (c == 'y' || c == 'Y')
yf = YANKONLY; yf = YANKONLY;
save_dot = dot;
#endif #endif
// determine range, and whether it spans lines // determine range, and whether it spans lines
buftype = find_range(&p, &q, c); buftype = find_range(&p, &q, c);
@ -3951,6 +3952,11 @@ static void do_cmd(int c)
dot_begin(); dot_begin();
dot_skip_over_ws(); dot_skip_over_ws();
} }
#if ENABLE_FEATURE_VI_YANKMARK
else /* (c == 'y' || c == 'Y') */ {
dot = save_dot;
}
#endif
} }
// if CHANGING, not deleting, start inserting after the delete // if CHANGING, not deleting, start inserting after the delete
if (c == 'c') { if (c == 'c') {