]> git.eshelyaron.com Git - emacs.git/commitdiff
Treat SIGINT correctly in GUI sessions on MS-Windows
authorEli Zaretskii <eliz@gnu.org>
Mon, 5 Sep 2016 16:50:59 +0000 (19:50 +0300)
committerEli Zaretskii <eliz@gnu.org>
Mon, 5 Sep 2016 16:50:59 +0000 (19:50 +0300)
* src/w32proc.c (sys_signal): Don't reject SIGINT, as it is
supported by MS runtime.
* src/term.c (DEV_TTY): Move from here ...
* src/conf_post.h (DEV_TTY): ... to here.  Separate definitions
for WINDOWSNT and for the rest.
* src/keyboard.c (handle_interrupt_signal): Use DEV_TTY instead of
a literal "/dev/tty".

* etc/NEWS: Mention the behavior change.

etc/NEWS
src/conf_post.h
src/keyboard.c
src/term.c
src/w32proc.c

index 3092e9f22b9386edb7e88851f7251b21451cea26..79a476ca6653a0595557a03242aa71d638030080 100644 (file)
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -607,6 +607,13 @@ still apply.)
 Previously, on MS-Windows this function converted slash characters in
 file names into backslashes.  It no longer does that.
 
+** GUI sessions now treat SIGINT like Posix platforms do.
+The effect of delivering a Ctrl-C (SIGINT) signal to a GUI Emacs on
+MS-Windows is now the same as on Posix platforms -- Emacs saves the
+session and exits.  In particular, this will happen if you start
+emacs.exe from the Windows shell, then type Ctrl-C into that shell's
+window.
+
 \f
 * Installation Changes in Emacs 25.1
 
index 865d0183a57380b05d13f880208d236322f059d5..bc8b096488225929f5a829fa4d7fcf34a2a076ca 100644 (file)
@@ -140,6 +140,10 @@ typedef bool bool_bf;
 #undef HAVE_RINT
 #endif  /* HPUX */
 
+#ifdef WINDOWSNT
+# define DEV_TTY "CONOUT$"
+#endif
+
 #ifdef MSDOS
 #ifndef __DJGPP__
 You lose; /* Emacs for DOS must be compiled with DJGPP */
@@ -242,6 +246,11 @@ extern int emacs_setenv_TZ (char const *);
 #include <string.h>
 #include <stdlib.h>
 
+#ifndef DEV_TTY
+# define DEV_TTY "/dev/tty"
+#endif
+
+
 #if __GNUC__ >= 3  /* On GCC 3.0 we might get a warning.  */
 #define NO_INLINE __attribute__((noinline))
 #else
index e44155260f8fc9a253ec40c4d420424926d12f52..3ef797c11c35338374b3c26a90f261bda9d28e18 100644 (file)
@@ -10241,7 +10241,7 @@ static void
 handle_interrupt_signal (int sig)
 {
   /* See if we have an active terminal on our controlling tty.  */
-  struct terminal *terminal = get_named_terminal ("/dev/tty");
+  struct terminal *terminal = get_named_terminal (DEV_TTY);
   if (!terminal)
     {
       /* If there are no frames there, let's pretend that we are a
index d54ff115f9d09b8bde061399305fc08b3e51e5a8..cb684b3aaa63197367dc123693adf0c1dbfbad76 100644 (file)
@@ -58,10 +58,7 @@ static int been_here = -1;
 
 /* The name of the default console device.  */
 #ifdef WINDOWSNT
-#define DEV_TTY  "CONOUT$"
 #include "w32term.h"
-#else
-#define DEV_TTY  "/dev/tty"
 #endif
 
 static void tty_set_scroll_region (struct frame *f, int start, int stop);
index 11a121f7c0928f398be0d3b9333ffb10bf3ae884..217d005a36352bd109a5f854ece2c5289656c5a1 100644 (file)
@@ -86,9 +86,9 @@ sys_signal (int sig, signal_handler handler)
   /* SIGCHLD is needed for supporting subprocesses, see sys_kill
      below.  SIGALRM and SIGPROF are used by setitimer.  All the
      others are the only ones supported by the MS runtime.  */
-  if (!(sig == SIGCHLD || sig == SIGSEGV || sig == SIGILL
+  if (!(sig == SIGINT || sig == SIGSEGV || sig == SIGILL
        || sig == SIGFPE || sig == SIGABRT || sig == SIGTERM
-       || sig == SIGALRM || sig == SIGPROF))
+       || sig == SIGCHLD || sig == SIGALRM || sig == SIGPROF))
     {
       errno = EINVAL;
       return SIG_ERR;