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) |
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 865d0183a5..bc8b096488 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 e44155260f..3ef797c11c 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 d54ff115f9..cb684b3aaa 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 11a121f7c0..217d005a36 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; |