NetBSD-Bugs archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: lib/57592: curses: aspell clears screen if no correction found

The following reply was made to PR lib/57592; it has been noted by GNATS.

From: RVP <rvp%SDF.ORG@localhost>
Cc: Rin Okuyama <>
Subject: Re: lib/57592: curses: aspell clears screen if no correction found
Date: Sun, 10 Sep 2023 22:48:29 +0000 (UTC)

 On Sun, 10 Sep 2023, Rin Okuyama wrote:
 > aspell linked against outputs additional ``^[[H'' and
 > ``^[[2J'' that cause screen clear.
 Yes, it's the 2nd (unpaired) rmcup which clears the screen (ncurses+Rxvt only).
 > However, this is not a regression for our curses [...]
 My analysis is that aspell will only clear the screen like this, if
 a) TERM=rxvt
 b) curses is ncurses.
 I made some notes (and also a patch) a couple of days ago. I've added this
 as-is below. Okuyama-san, can you check this please?
 --- NOTES: Aspell + ncurses + TERM=rxvt clearing the screen ---
 To trigger this issue you must:
 1. Call endwin() twice.
     (See: aspell-0.60.8/prog/check_funs.cpp:begin_check())
 2. Have a curses with non-idempotent endwin() (like ncurses; BSD curses
     is not affected by this).
 3. Have a termcap/terminfo entry where the `te'/`rmcup' capability has an
     Erase in Display (ED) string `\E[2J' in it (like for rxvt).
 This should reproduce the issue more simply:
 $ (export TERM=rxvt; tput smcup; tput rmcup; tput rmcup)
 The second `rmcup' will clear the current screen instead of the alt. screen.
 diff -urN aspell-0.60.8.orig/prog/check_funs.cpp aspell-0.60.8/prog/check_funs.cpp
 --- aspell-0.60.8.orig/prog/check_funs.cpp	2019-10-08 00:15:21.000000000 +0000
 +++ aspell-0.60.8/prog/check_funs.cpp	2023-09-07 07:31:11.452543000 +0000
 @@ -110,6 +110,9 @@
   static void cleanup (void) {
 +  static int done = 0;
 +  if (done)
 +    return;    /* do cleanup only once (for ncurses; see NetBSD PR #57592) */
     if (use_curses) {
 @@ -120,6 +123,7 @@
       tcsetattr (STDIN_FILENO, TCSANOW, &saved_attributes);
 +  done = 1;
 --- END of NOTES ---

Home | Main Index | Thread Index | Old Index