commit a0d89977b7428508726eb6909a849b4d3ce3e3d0
parent cff6e6f60f284e5a7182be9fc49bb471818a5e1d
Author: Chris Allegretta <chrisa@asty.org>
Date: Mon, 3 Feb 2003 03:32:08 +0000
- Fix screen getting trashed on signals nano can catch (TERM and HUP). New global variable curses_ended changes to winio.c:statubar() and nano.c:die()
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1413 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
Diffstat:
6 files changed, 26 insertions(+), 8 deletions(-)
diff --git a/ChangeLog b/ChangeLog
@@ -27,6 +27,9 @@ CVS Code -
in syntax higlighting. (David Benbennick).
- Fix justify failing for certain lines, new function
nano.c:breakable() (David Benbennick).
+ - Fix screen getting trashed on signals nano can catch
+ (TERM and HUP). New global variable curses_ended,
+ changes to winio.c:statubar() and nano.c:die().
- cut.c:
do_cut_text()
- Fix incorrect cursor location when cutting long lines
diff --git a/files.c b/files.c
@@ -1339,7 +1339,8 @@ int write_file(const char *name, int tmp, int append, int nonamechange)
statusbar(_("Cancelled"));
return -1;
}
- titlebar(NULL);
+ if (!tmp)
+ titlebar(NULL);
fileptr = fileage;
realname = real_dir_from_tilde(name);
diff --git a/global.c b/global.c
@@ -147,6 +147,11 @@ regmatch_t regmatches[10]; /* Match positions for parenthetical
subexpressions, max of 10 */
#endif
+int curses_ended = FALSE; /* Indicates to statusbar() to simply
+ * write to stderr, since endwin() has
+ * ended curses mode. */
+
+
int length_of_list(const shortcut *s)
{
int i = 0;
diff --git a/nano.c b/nano.c
@@ -105,14 +105,12 @@ void die(const char *msg, ...)
{
va_list ap;
+ endwin();
+ curses_ended = TRUE;
+
/* Restore the old term settings */
tcsetattr(0, TCSANOW, &oldterm);
- clear();
- refresh();
- resetty();
- endwin();
-
va_start(ap, msg);
vfprintf(stderr, msg, ap);
va_end(ap);
@@ -2804,7 +2802,7 @@ void signal_init(void)
/* Handler for SIGHUP and SIGTERM */
RETSIGTYPE handle_hupterm(int signal)
{
- die(_("Received SIGHUP or SIGTERM"));
+ die(_("Received SIGHUP or SIGTERM\n"));
}
/* What do we do when we catch the suspend signal */
diff --git a/proto.h b/proto.h
@@ -115,6 +115,8 @@ extern historyheadtype search_history;
extern historyheadtype replace_history;
#endif
+extern int curses_ended;
+
/* Functions we want available */
/* Public functions in color.c */
diff --git a/winio.c b/winio.c
@@ -1355,10 +1355,19 @@ void statusbar(const char *msg, ...)
int start_x = 0;
size_t foo_len;
+ va_start(ap, msg);
+
+ /* Curses mode is turned off. If we use wmove() now, it will muck up
+ the terminal settings. So we just use vfprintf(). */
+ if (curses_ended) {
+ vfprintf(stderr, msg, ap);
+ va_end(ap);
+ return;
+ }
+
assert(COLS >= 4);
foo = charalloc(COLS - 3);
- va_start(ap, msg);
vsnprintf(foo, COLS - 3, msg, ap);
va_end(ap);