Index | Thread | Search

From:
ASOU Masato <takeasou.masato@gmail.com>
Subject:
Re: libedit: porting request
To:
YASUOKA Masahiko <yasuoka@openbsd.org>
Cc:
schwarze@openbsd.org, tech@openbsd.org, naito.yuichiro@gmail.com
Date:
Tue, 20 Jan 2026 10:39:38 +0900

Download raw body.

Thread
I used the test program in the comments below:
https://github.com/NetBSD/src/commit/964e441ae0de9ef8ef53f77dddf4aa1ced782c15

I confirmed that applying the patch resolve the issue.

ok @asou
--
ASOU Masato

On Mon, Jan 19, 2026 at 5:53 PM YASUOKA Masahiko <yasuoka@openbsd.org> wrote:
>
> On Mon, 19 Jan 2026 15:34:27 +0900
> Yuichiro NAITO <naito.yuichiro@gmail.com> wrote:
> > Does anybody please port the following NetBSD patch to OpenBSD?
>
> Yes.  Thank you for the fix.
>
> > You can apply this patch simply to the OpenBSD src.
> >
> > https://github.com/NetBSD/src/commit/964e441ae0de9ef8ef53f77dddf4aa1ced782c15
> >
> > This patch fixes an issue where long editing command lines will
> > overwrite the last help messages.
> >
> > You can reproduce this issue with the sample program in the commit
> > message. Just compile the sample code and run it. While you're
> > editing a command more than one line, typing '?' will show the help
> > message, but the last help message will be overwritten, so users
> > miss it. This patch solves this issue.
>
> I tested the diff fixes the same problem happening on OpenBSD.
>
> ok?
>
> Index: lib/libedit/refresh.c
> ===================================================================
> RCS file: /cvs/src/lib/libedit/refresh.c,v
> diff -u -p -r1.23 refresh.c
> --- lib/libedit/refresh.c       8 Mar 2023 04:43:05 -0000       1.23
> +++ lib/libedit/refresh.c       19 Jan 2026 08:38:14 -0000
> @@ -1163,16 +1163,24 @@ re_clear_display(EditLine *el)
>  protected void
>  re_clear_lines(EditLine *el)
>  {
> +       int i;
>
>         if (EL_CAN_CEOL) {
> -               int i;
>                 for (i = el->el_refresh.r_oldcv; i >= 0; i--) {
> +                       if (i > 0) {
> +                               terminal__putc(el, '\r');
> +                               terminal__putc(el, '\n');
> +                       }
>                         /* for each line on the screen */
>                         terminal_move_to_line(el, i);
>                         terminal_move_to_char(el, 0);
>                         terminal_clear_EOL(el, el->el_terminal.t_size.h);
>                 }
>         } else {
> +               for (i = el->el_refresh.r_oldcv; i > 0; i--) {
> +                       terminal__putc(el, '\r');
> +                       terminal__putc(el, '\n');
> +               }
>                 terminal_move_to_line(el, el->el_refresh.r_oldcv);
>                                         /* go to last line */
>                 terminal__putc(el, '\r');       /* go to BOL */
>