1
0
mirror of https://git.savannah.gnu.org/git/emacs.git synced 2025-01-20 18:17:20 +00:00

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.
This commit is contained in:
Eli Zaretskii 2016-09-05 19:50:59 +03:00
parent 62e4dc4660
commit cfaf18a27c
5 changed files with 19 additions and 6 deletions

View File

@ -607,6 +607,13 @@ still apply.)
Previously, on MS-Windows this function converted slash characters in Previously, on MS-Windows this function converted slash characters in
file names into backslashes. It no longer does that. 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 * Installation Changes in Emacs 25.1

View File

@ -140,6 +140,10 @@ typedef bool bool_bf;
#undef HAVE_RINT #undef HAVE_RINT
#endif /* HPUX */ #endif /* HPUX */
#ifdef WINDOWSNT
# define DEV_TTY "CONOUT$"
#endif
#ifdef MSDOS #ifdef MSDOS
#ifndef __DJGPP__ #ifndef __DJGPP__
You lose; /* Emacs for DOS must be compiled with 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 <string.h>
#include <stdlib.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. */ #if __GNUC__ >= 3 /* On GCC 3.0 we might get a warning. */
#define NO_INLINE __attribute__((noinline)) #define NO_INLINE __attribute__((noinline))
#else #else

View File

@ -10241,7 +10241,7 @@ static void
handle_interrupt_signal (int sig) handle_interrupt_signal (int sig)
{ {
/* See if we have an active terminal on our controlling tty. */ /* 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 (!terminal)
{ {
/* If there are no frames there, let's pretend that we are a /* If there are no frames there, let's pretend that we are a

View File

@ -58,10 +58,7 @@ static int been_here = -1;
/* The name of the default console device. */ /* The name of the default console device. */
#ifdef WINDOWSNT #ifdef WINDOWSNT
#define DEV_TTY "CONOUT$"
#include "w32term.h" #include "w32term.h"
#else
#define DEV_TTY "/dev/tty"
#endif #endif
static void tty_set_scroll_region (struct frame *f, int start, int stop); static void tty_set_scroll_region (struct frame *f, int start, int stop);

View File

@ -86,9 +86,9 @@ sys_signal (int sig, signal_handler handler)
/* SIGCHLD is needed for supporting subprocesses, see sys_kill /* SIGCHLD is needed for supporting subprocesses, see sys_kill
below. SIGALRM and SIGPROF are used by setitimer. All the below. SIGALRM and SIGPROF are used by setitimer. All the
others are the only ones supported by the MS runtime. */ 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 == SIGFPE || sig == SIGABRT || sig == SIGTERM
|| sig == SIGALRM || sig == SIGPROF)) || sig == SIGCHLD || sig == SIGALRM || sig == SIGPROF))
{ {
errno = EINVAL; errno = EINVAL;
return SIG_ERR; return SIG_ERR;