Can I add

   Signed-off-by: Ron Yorston <[email protected]>

to your two recent patches?

On Sat, Apr 17, 2021 at 10:26 AM Ron Yorston <[email protected]> wrote:
>
> Commit ac6495f6f (vi: allow ctrl-D to reduce indentation) treated
> ctrl-D during autoindent as a backspace.  This was adequate for
> indentation using tabs but doesn't work well with the expandtab
> option.  In the latter case it's necessary to backspace over all
> the spaces.
>
> Make ctrl-D work correctly when spaces are present in the indent.
>
> Also, make it behave more like vim:
>
> - ctrl-D is independent of autoindent;
> - indentation is reduced even when the cursor isn't positioned at
>   the end of the indent.
>
> function                                             old     new   delta
> char_insert                                          679     717     +38
> get_column                                             -      37     +37
> ------------------------------------------------------------------------------
> (add/remove: 1/0 grow/shrink: 1/0 up/down: 75/0)               Total: 75 bytes
> ---
>  editors/vi.c | 30 +++++++++++++++++++++---------
>  1 file changed, 21 insertions(+), 9 deletions(-)
>
> diff --git a/editors/vi.c b/editors/vi.c
> index 4967ff5ec..c125be26f 100644
> --- a/editors/vi.c
> +++ b/editors/vi.c
> @@ -762,6 +762,11 @@ static int next_tabstop(int col)
>         return col + ((tabstop - 1) - (col % tabstop));
>  }
>
> +static int prev_tabstop(int col)
> +{
> +       return col - ((col % tabstop) ?: tabstop);
> +}
> +
>  static int next_column(char c, int co)
>  {
>         if (c == '\t')
> @@ -771,7 +776,6 @@ static int next_column(char c, int co)
>         return co + 1;
>  }
>
> -#if ENABLE_FEATURE_VI_SETOPTS
>  static int get_column(char *p)
>  {
>         const char *r;
> @@ -781,7 +785,6 @@ static int get_column(char *p)
>                 co = next_column(*r, co);
>         return co;
>  }
> -#endif
>
>  //----- Erase the Screen[] memory ------------------------------
>  static void screen_erase(void)
> @@ -2112,14 +2115,23 @@ static char *char_insert(char *p, char c, int undo) 
> // insert the char c at 'p'
>                 if ((p[-1] != '\n') && (dot > text)) {
>                         p--;
>                 }
> -#if ENABLE_FEATURE_VI_SETOPTS
> -       } else if (c == 4 && autoindent) {      // ctrl-D reduces indentation
> -               q = begin_line(p);
> -               len = strspn(q, " \t");
> -               if (len && q + len == p) {
> -                       p--;
> -                       p = text_hole_delete(p, p, ALLOW_UNDO_QUEUED);
> +       } else if (c == 4) {    // ctrl-D reduces indentation
> +               int prev;
> +               char *r, *bol;
> +               bol = begin_line(p);
> +               for (r = bol; r < end_line(p); ++r) {
> +                       if (!isblank(*r))
> +                               break;
>                 }
> +
> +               prev = prev_tabstop(get_column(r));
> +               while (r > bol && get_column(r) > prev) {
> +                       if (p > bol)
> +                               p--;
> +                       r--;
> +                       r = text_hole_delete(r, r, ALLOW_UNDO_QUEUED);
> +               }
> +#if ENABLE_FEATURE_VI_SETOPTS
>         } else if (c == '\t' && expandtab) {    // expand tab
>                 int col = get_column(p);
>                 col = next_tabstop(col) - col + 1;
> --
> 2.30.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

Reply via email to