Applied, thanks!
On Mon, Feb 1, 2021 at 12:54 PM Ron Yorston <[email protected]> wrote: > > Selection of ranges for change/delete/yank by forward character > motion commands (SPACE or 'l') was incorrect. The range was > always one character whereas vi allows the size of the range to > be specified. > > Fix this by executing the motion command the required number of times. > There is a complication when the range is at the end of a line. We need > to distinguish between a range which excludes the last character and > one which includes it. This requires comparing the actual range with > that expected from the command count. (With the additional quirk that > a command count of zero is equivalent to a command count of one.) > > function old new delta > find_range 587 619 +32 > ------------------------------------------------------------------------------ > (add/remove: 0/0 grow/shrink: 1/0 up/down: 32/0) Total: 32 bytes > > Signed-off-by: Ron Yorston <[email protected]> > --- > editors/vi.c | 15 +++++++++------ > 1 file changed, 9 insertions(+), 6 deletions(-) > > diff --git a/editors/vi.c b/editors/vi.c > index 01597fa5e..adfb2b87c 100644 > --- a/editors/vi.c > +++ b/editors/vi.c > @@ -3047,12 +3047,15 @@ static int find_range(char **start, char **stop, char > c) > do_cmd(c); // execute movement cmd > dot_end(); // find NL > q = dot; > - } else { > - // nothing -- this causes any other values of c to > - // represent the one-character range under the > - // cursor. this is correct for ' ' and 'l', but > - // perhaps no others. > - // > + } else /* if (c == ' ' || c == 'l') */ { > + // forward motion by character > + int tmpcnt = (cmdcnt ?: 1); > + do_cmd(c); // execute movement cmd > + // exclude last char unless range isn't what we expected > + // this indicates we've hit EOL > + if (tmpcnt == dot - p) > + dot--; > + q = dot; > } > if (q < p) { > t = q; > -- > 2.29.2 > > _______________________________________________ > busybox mailing list > [email protected] > http://lists.busybox.net/mailman/listinfo/busybox _______________________________________________ busybox mailing list [email protected] http://lists.busybox.net/mailman/listinfo/busybox
