From bb18524cce2f1109eb2e7b5ad911d2bc1e095f75 Mon Sep 17 00:00:00 2001 From: Benno Schulenberg Date: Thu, 21 Jul 2022 16:40:15 +0200 Subject: [PATCH] formatter: instead of leaving curses, use full_refresh() to wipe messages This makes invoking the formatter cleaner, by giving feedback and *not* leaving curses mode. Leaving curses mode had the small advantage that any messages from the formatter would be on the terminal after closing nano. But it had the disadvantage that invoking the formatter flashed the screen. This basically reverts commit 2b9f0619 from three years ago and then solves the issue of intruding formatter messages in a different way. This fulfills https://savannah.gnu.org/bugs/?62789. Requested-by: Gert Cuykens --- src/text.c | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/src/text.c b/src/text.c index f4f21b51..38041add 100644 --- a/src/text.c +++ b/src/text.c @@ -2120,8 +2120,11 @@ void treat(char *tempfile_name, char *theprogram, bool spelling) timestamp_nsec = (long)fileinfo.st_mtim.tv_nsec; } - /* Exit from curses mode to give the program control of the terminal. */ - endwin(); + /* The spell checker needs the screen, so exit from curses mode. */ + if (spelling) + endwin(); + else + statusbar(_("Invoking formatter...")); construct_argument_list(&arguments, theprogram, tempfile_name); @@ -2141,9 +2144,13 @@ void treat(char *tempfile_name, char *theprogram, bool spelling) errornumber = errno; - /* Restore the terminal state and reenter curses mode. */ - terminal_init(); - doupdate(); + /* After spell checking, restore terminal state and reenter curses mode; + * after formatting, make sure that any formatter output is wiped. */ + if (spelling) { + terminal_init(); + doupdate(); + } else + full_refresh(); if (thepid < 0) { statusline(ALERT, _("Could not fork: %s"), strerror(errornumber));