Index | Thread | Search

From:
Stuart Henderson <stu@spacehopper.org>
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:49:03 +0000

Download raw body.

Thread
ok sthen.

the actual NetBSD commit is
https://github.com/NetBSD/src/commit/9531a8c65e8db103fe63f1c1ed2ede8aca6067a6
(964e441ae seems to be from some fork, possibly now deleted?)

On 2026/01/19 17:52, YASUOKA Masahiko 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 */
>