- 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
master
Chris Allegretta 2003-02-03 03:32:08 +00:00
parent cff6e6f60f
commit a0d89977b7
6 changed files with 26 additions and 8 deletions

View File

@ -27,6 +27,9 @@ CVS Code -
in syntax higlighting. (David Benbennick). in syntax higlighting. (David Benbennick).
- Fix justify failing for certain lines, new function - Fix justify failing for certain lines, new function
nano.c:breakable() (David Benbennick). 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: - cut.c:
do_cut_text() do_cut_text()
- Fix incorrect cursor location when cutting long lines - Fix incorrect cursor location when cutting long lines

View File

@ -1339,7 +1339,8 @@ int write_file(const char *name, int tmp, int append, int nonamechange)
statusbar(_("Cancelled")); statusbar(_("Cancelled"));
return -1; return -1;
} }
titlebar(NULL); if (!tmp)
titlebar(NULL);
fileptr = fileage; fileptr = fileage;
realname = real_dir_from_tilde(name); realname = real_dir_from_tilde(name);

View File

@ -147,6 +147,11 @@ regmatch_t regmatches[10]; /* Match positions for parenthetical
subexpressions, max of 10 */ subexpressions, max of 10 */
#endif #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 length_of_list(const shortcut *s)
{ {
int i = 0; int i = 0;

10
nano.c
View File

@ -105,14 +105,12 @@ void die(const char *msg, ...)
{ {
va_list ap; va_list ap;
endwin();
curses_ended = TRUE;
/* Restore the old term settings */ /* Restore the old term settings */
tcsetattr(0, TCSANOW, &oldterm); tcsetattr(0, TCSANOW, &oldterm);
clear();
refresh();
resetty();
endwin();
va_start(ap, msg); va_start(ap, msg);
vfprintf(stderr, msg, ap); vfprintf(stderr, msg, ap);
va_end(ap); va_end(ap);
@ -2804,7 +2802,7 @@ void signal_init(void)
/* Handler for SIGHUP and SIGTERM */ /* Handler for SIGHUP and SIGTERM */
RETSIGTYPE handle_hupterm(int signal) 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 */ /* What do we do when we catch the suspend signal */

View File

@ -115,6 +115,8 @@ extern historyheadtype search_history;
extern historyheadtype replace_history; extern historyheadtype replace_history;
#endif #endif
extern int curses_ended;
/* Functions we want available */ /* Functions we want available */
/* Public functions in color.c */ /* Public functions in color.c */

11
winio.c
View File

@ -1355,10 +1355,19 @@ void statusbar(const char *msg, ...)
int start_x = 0; int start_x = 0;
size_t foo_len; 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); assert(COLS >= 4);
foo = charalloc(COLS - 3); foo = charalloc(COLS - 3);
va_start(ap, msg);
vsnprintf(foo, COLS - 3, msg, ap); vsnprintf(foo, COLS - 3, msg, ap);
va_end(ap); va_end(ap);