diff options
| author | Eli Zaretskii <eliz@gnu.org> | 2016-09-05 19:50:59 +0300 | 
|---|---|---|
| committer | Eli Zaretskii <eliz@gnu.org> | 2016-09-05 19:50:59 +0300 | 
| commit | cfaf18a27c262694750400005e882f1cfc7ff2b0 (patch) | |
| tree | cf5b3cb11a3dd8ba29f63d64163f5cdae7bd47b6 | |
| parent | 62e4dc4660cb3b29cfffcad0639e51c7f382ced8 (diff) | |
| download | emacs-cfaf18a27c262694750400005e882f1cfc7ff2b0.tar.gz | |
Treat SIGINT correctly in GUI sessions on MS-Windows
* 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.
| -rw-r--r-- | etc/NEWS | 7 | ||||
| -rw-r--r-- | src/conf_post.h | 9 | ||||
| -rw-r--r-- | src/keyboard.c | 2 | ||||
| -rw-r--r-- | src/term.c | 3 | ||||
| -rw-r--r-- | src/w32proc.c | 4 | 
5 files changed, 19 insertions, 6 deletions
@@ -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. +  * Installation Changes in Emacs 25.1 diff --git a/src/conf_post.h b/src/conf_post.h index 865d0183a57..bc8b0964882 100644 --- a/src/conf_post.h +++ b/src/conf_post.h @@ -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 diff --git a/src/keyboard.c b/src/keyboard.c index e44155260f8..3ef797c11c3 100644 --- a/src/keyboard.c +++ b/src/keyboard.c @@ -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 diff --git a/src/term.c b/src/term.c index d54ff115f9d..cb684b3aaa6 100644 --- a/src/term.c +++ b/src/term.c @@ -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); diff --git a/src/w32proc.c b/src/w32proc.c index 11a121f7c09..217d005a363 100644 --- a/src/w32proc.c +++ b/src/w32proc.c @@ -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;  | 
