]> git.wh0rd.org Git - nano.git/commitdiff
- Fix screen getting trashed on signals nano can catch (TERM and HUP). New global...
authorChris Allegretta <chrisa@asty.org>
Mon, 3 Feb 2003 03:32:08 +0000 (03:32 +0000)
committerChris Allegretta <chrisa@asty.org>
Mon, 3 Feb 2003 03:32:08 +0000 (03:32 +0000)
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1413 35c25a1d-7b9e-4130-9fde-d3aeb78583b8

ChangeLog
files.c
global.c
nano.c
proto.h
winio.c

index c0c5cd3525e2b972bf871028e428240134d31482..6fdf784c8982cda881a6f5c3b3a2385f31095b67 100644 (file)
--- 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 26808a7a576452cc027c6c0b28fa9b32be92d465..0fab49aa5936a975d306f4b3cdc0cdb46f530d46 100644 (file)
--- 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);
index 9cda4384792f3dd2605008e05d690a3f78547bfa..66ef3a7c03987c5087c11432c8f378dca04a38b7 100644 (file)
--- 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 3286284deb548f302905f20c83965545ce827a74..b87ec57e64bf1dd194fdd1367c4c2539a8756748 100644 (file)
--- 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 1ab4f4de332e45443538ac8a0ba56c13eac681d0..e572a855bb5a734f95d68d2b99e66fac4af4cd23 100644 (file)
--- 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 740cf98b35962dc32d33f4ec1ab8ace7f7864d82..4e3e7b4dd69325f1d4a670ff32971aefe1ae7d1b 100644 (file)
--- 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);