]> git.wh0rd.org Git - nano.git/commitdiff
VDSUSP fix from 1.0 tree
authorChris Allegretta <chrisa@asty.org>
Mon, 17 Dec 2001 04:34:23 +0000 (04:34 +0000)
committerChris Allegretta <chrisa@asty.org>
Mon, 17 Dec 2001 04:34:23 +0000 (04:34 +0000)
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@931 35c25a1d-7b9e-4130-9fde-d3aeb78583b8

ChangeLog
nano.c
proto.h

index 9e1491899217c9be7fbf394efb60d46261bda9d1..1b8283689e68f0ab2dfdcc252305dafc8da05c6a 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,4 +1,11 @@
 CVS code -
+- nano.c:
+  do_cont()
+       - Run signal_init() after doupdate() so ^Y wont suddenly
+         start suspending after returning from ^Z suspend in Hurd.
+  signal_init()
+       - Unconditionally disable VDSUSP if it exists, stops ^Y
+         suspending nano on the Hurd.
 
 nano-1.1.4 - 12/11/2001
 - General
diff --git a/nano.c b/nano.c
index 3c403dba46108d684380bebb883ca806e2ed929a..74adc877dcd5d0f063bc182b92665cebeb439793 100644 (file)
--- a/nano.c
+++ b/nano.c
@@ -1937,6 +1937,9 @@ RETSIGTYPE do_cont(int signal)
        SIGTSTP handler */
 
     doupdate();
+    /* The Hurd seems to need this, otherwise a ^Y after a ^Z will
+       start suspending again */
+   signal_init();
 }
 
 void handle_sigwinch(int s)
@@ -2033,18 +2036,25 @@ void signal_init(void)
     act.sa_handler = handle_sigwinch;
     sigaction(SIGWINCH, &act, NULL);
 
+
+#ifdef _POSIX_VDISABLE
+    tcgetattr(0, &term);
+
+#ifdef VDSUSP
+    term.c_cc[VDSUSP] = _POSIX_VDISABLE;
+#endif /* VDSUSP */
+
+#endif /* _POSIX_VDISABLE */
+
     if (!ISSET(SUSPEND)) {
 
 /* Insane! */
 #ifdef _POSIX_VDISABLE
-       tcgetattr(0, &term);
        term.c_cc[VSUSP] = _POSIX_VDISABLE;
-       tcsetattr(0, TCSANOW, &term);
-#endif
-
-       /* The HURD seems to need this anyway! */
+#else
        act.sa_handler = SIG_IGN;
        sigaction(SIGTSTP, &act, NULL);
+#endif
 
     } else {
        /* if we don't do this, it seems other stuff interrupts the
@@ -2058,6 +2068,12 @@ void signal_init(void)
        sigaction(SIGCONT, &act, NULL);
     }
 
+
+#ifdef _POSIX_VDISABLE
+    tcsetattr(0, TCSANOW, &term);
+#endif
+
+
 }
 
 void window_init(void)
diff --git a/proto.h b/proto.h
index e7fcf5399790b8c1b318f6d9ef81301e4ab59e12..bd4d2a2045ac4b2ecad0c2064d2d8df59daaf45b 100644 (file)
--- a/proto.h
+++ b/proto.h
@@ -133,6 +133,7 @@ char *input_tab(char *buf, int place, int *lastWasTab, int *newplace, int *list)
 char *real_dir_from_tilde(char *buf);
 
 void shortcut_init(int unjustify);
+void signal_init(void);
 void lowercase(char *src);
 void blank_bottombars(void);
 void check_wrap(filestruct * inptr, char ch);