From bd11c0171b7ca9dddac67f852d13f5e4ac49178f Mon Sep 17 00:00:00 2001 From: David Lawrence Ramsey Date: Tue, 21 Jun 2005 01:33:31 +0000 Subject: [PATCH] recover properly when the alternate spell checker fails git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@2741 35c25a1d-7b9e-4130-9fde-d3aeb78583b8 --- ChangeLog | 6 +++++- src/nano.c | 25 ++++++++++++++++--------- 2 files changed, 21 insertions(+), 10 deletions(-) diff --git a/ChangeLog b/ChangeLog index f6fbe1ef..dc8c24bf 100644 --- a/ChangeLog +++ b/ChangeLog @@ -226,9 +226,13 @@ CVS code - - Replace a set_modified() with SET(MODIFIED) to avoid an unnecessary update, and remove an unneeded clearok(FALSE). (DLR) + - Move the spell checking error handling block down and refactor + it so that we go back into curses mode, reinitialize the + terminal, turn the cursor back on, and turn the mark back on + if necessary before returning the error message. (DLR) do_spell() - If the spell-checker printed any error messages onscreen, call - total_redraw() to make sure they're cleared off. (DLR, found + total_refresh() to make sure they're cleared off. (DLR, found by CHAO Wei-Lun) do_output() - Properly allow wrapping when we insert a tab, for consistency. diff --git a/src/nano.c b/src/nano.c index f189f87a..594929c0 100644 --- a/src/nano.c +++ b/src/nano.c @@ -2359,6 +2359,14 @@ const char *do_alt_speller(char *tempfile_name) /* Wait for alternate speller to complete. */ wait(&alt_spell_status); + refresh(); + + /* Restore the terminal to its previous state. */ + terminal_init(); + + /* Turn the cursor back on for sure. */ + curs_set(1); + if (!WIFEXITED(alt_spell_status) || WEXITSTATUS(alt_spell_status) != 0) { char *altspell_error = NULL; @@ -2367,16 +2375,15 @@ const char *do_alt_speller(char *tempfile_name) altspell_error = charalloc(msglen); snprintf(altspell_error, msglen, invoke_error, alt_speller); - return altspell_error; - } - refresh(); - - /* Restore the terminal to its previous state. */ - terminal_init(); +#ifndef NANO_SMALL + /* Turn the mark back on if it was on before. */ + if (old_mark_set) + SET(MARK_ISSET); +#endif - /* Turn the cursor back on for sure. */ - curs_set(1); + return altspell_error; + } #ifndef NANO_SMALL if (old_mark_set) { @@ -2509,7 +2516,7 @@ void do_spell(void) /* If the spell-checker printed any error messages onscreen, make * sure that they're cleared off. */ - total_redraw(); + total_refresh(); if (spell_msg != NULL) statusbar(_("Spell checking failed: %s: %s"), spell_msg, -- 2.39.5