From: Chris Allegretta Date: Mon, 3 Feb 2003 03:32:08 +0000 (+0000) Subject: - Fix screen getting trashed on signals nano can catch (TERM and HUP). New global... X-Git-Tag: v1.1.99pre2~7 X-Git-Url: https://git.wh0rd.org/?a=commitdiff_plain;h=a0d89977b7428508726eb6909a849b4d3ce3e3d0;p=nano.git - 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 --- diff --git a/ChangeLog b/ChangeLog index c0c5cd35..6fdf784c 100644 --- 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 index 26808a7a..0fab49aa 100644 --- 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 index 9cda4384..66ef3a7c 100644 --- 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 index 3286284d..b87ec57e 100644 --- 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 index 1ab4f4de..e572a855 100644 --- 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 index 740cf98b..4e3e7b4d 100644 --- 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);