Mercurial > emacs
changeset 110694:0554c384e09f
Run kill-emacs-hook in batch mode, and on SIGINT in batch mode.
See thread http://lists.gnu.org/archive/html/emacs-devel/2010-09/msg00795.html
* src/emacs.c (fatal_error_signal): Also run Fkill_emacs on SIGINT.
(main) [!WINDOWSNT]: Handle SIGINT with fatal_error_signal
in batch-mode.
(Fkill_emacs): Doc fix. Also run the hook in batch mode.
(kill-emacs-hook): Doc fix.
* lisp/emacs-lisp/bytecomp.el (byte-compile-file): Use kill-emacs-hook to
delete tempfile if interrupted during compilation.
* doc/lispref/os.texi (Killing Emacs): Hook now runs in batch mode.
* etc/NEWS: Mention these changes.
author | Glenn Morris <rgm@gnu.org> |
---|---|
date | Fri, 01 Oct 2010 19:30:11 -0700 |
parents | 754df5a0efe9 |
children | 515d80e174ba |
files | doc/lispref/ChangeLog doc/lispref/os.texi etc/NEWS lisp/ChangeLog lisp/emacs-lisp/bytecomp.el src/ChangeLog src/emacs.c |
diffstat | 7 files changed, 46 insertions(+), 10 deletions(-) [+] |
line wrap: on
line diff
--- a/doc/lispref/ChangeLog Sat Oct 02 04:04:20 2010 +0200 +++ b/doc/lispref/ChangeLog Fri Oct 01 19:30:11 2010 -0700 @@ -1,3 +1,7 @@ +2010-10-02 Glenn Morris <rgm@gnu.org> + + * os.texi (Killing Emacs): Hook now runs in batch mode. + 2010-09-18 Stefan Monnier <monnier@iro.umontreal.ca> * text.texi (Special Properties): Clarify when modification-hooks run.
--- a/doc/lispref/os.texi Sat Oct 02 04:04:20 2010 +0200 +++ b/doc/lispref/os.texi Fri Oct 01 19:30:11 2010 -0700 @@ -577,7 +577,6 @@ This variable is a normal hook; once @code{save-buffers-kill-emacs} is finished with all file saving and confirmation, it calls @code{kill-emacs} which runs the functions in this hook. -@code{kill-emacs} does not run this hook in batch mode. @code{kill-emacs} may be invoked directly (that is not via @code{save-buffers-kill-emacs}) if the terminal is disconnected, or in
--- a/etc/NEWS Sat Oct 02 04:04:20 2010 +0200 +++ b/etc/NEWS Fri Oct 01 19:30:11 2010 -0700 @@ -149,6 +149,11 @@ *** Tramp offers handlers for file-selinux-context and set-file-selinux-context for remote machines which support SELinux. +** The function kill-emacs is now run upon receipt of the signals SIGTERM +and SIGHUP, and (except on MS-Windows) SIGINT in batch mode. + +** kill-emacs-hook is now also run in batch mode. + ** New scrolling commands `scroll-up-command' and `scroll-down-command' (bound to C-v/[next] and M-v/[prior]) does not signal errors at top/bottom of buffer at first key-press (instead moves to top/bottom of buffer)
--- a/lisp/ChangeLog Sat Oct 02 04:04:20 2010 +0200 +++ b/lisp/ChangeLog Fri Oct 01 19:30:11 2010 -0700 @@ -1,3 +1,8 @@ +2010-10-02 Glenn Morris <rgm@gnu.org> + + * emacs-lisp/bytecomp.el (byte-compile-file): Use kill-emacs-hook to + delete tempfile if interrupted during compilation. + 2010-10-01 Lars Magne Ingebrigtsen <larsi@gnus.org> * net/tls.el (tls-starttls-switches): Give up on using starttls with
--- a/lisp/emacs-lisp/bytecomp.el Sat Oct 02 04:04:20 2010 +0200 +++ b/lisp/emacs-lisp/bytecomp.el Fri Oct 01 19:30:11 2010 -0700 @@ -1698,12 +1698,15 @@ (insert "\n") ; aaah, unix. (if (file-writable-p target-file) ;; We must disable any code conversion here. - (let ((coding-system-for-write 'no-conversion) - ;; Write to a tempfile so that if another Emacs - ;; process is trying to load target-file (eg in a - ;; parallel bootstrap), it does not risk getting a - ;; half-finished file. (Bug#4196) - (tempfile (make-temp-name target-file))) + (let* ((coding-system-for-write 'no-conversion) + ;; Write to a tempfile so that if another Emacs + ;; process is trying to load target-file (eg in a + ;; parallel bootstrap), it does not risk getting a + ;; half-finished file. (Bug#4196) + (tempfile (make-temp-name target-file)) + (kill-emacs-hook + (cons (lambda () (ignore-errors (delete-file tempfile))) + kill-emacs-hook))) (if (memq system-type '(ms-dos 'windows-nt)) (setq buffer-file-type t)) (write-region (point-min) (point-max) tempfile nil 1)
--- a/src/ChangeLog Sat Oct 02 04:04:20 2010 +0200 +++ b/src/ChangeLog Fri Oct 01 19:30:11 2010 -0700 @@ -1,3 +1,11 @@ +2010-10-02 Glenn Morris <rgm@gnu.org> + + * emacs.c (fatal_error_signal): Also run Fkill_emacs on SIGINT. + (main) [!WINDOWSNT]: Handle SIGINT with fatal_error_signal + in batch-mode. + (Fkill_emacs): Doc fix. Also run the hook in batch mode. + (kill-emacs-hook): Doc fix. + 2010-10-02 Lars Magne Ingebrigtsen <larsi@gnus.org> * xml.c (Flibxml_parse_xml_region, Flibxml_parse_html_region)
--- a/src/emacs.c Sat Oct 02 04:04:20 2010 +0200 +++ b/src/emacs.c Fri Oct 01 19:30:11 2010 -0700 @@ -378,7 +378,7 @@ { fatal_error_in_progress = 1; - if (sig == SIGTERM || sig == SIGHUP) + if (sig == SIGTERM || sig == SIGHUP || sig == SIGINT) Fkill_emacs (make_number (sig)); shut_down_emacs (sig, 0, Qnil); @@ -1240,6 +1240,14 @@ #ifdef SIGSYS signal (SIGSYS, fatal_error_signal); #endif +#ifndef WINDOWSNT + /* May need special treatment on MS-Windows. See + http://lists.gnu.org/archive/html/emacs-devel/2010-09/msg01062.html + Please update the doc of kill-emacs, kill-emacs-hook, and + NEWS if you change this. + */ + if ( noninteractive ) signal (SIGINT, fatal_error_signal); +#endif signal (SIGTERM, fatal_error_signal); #ifdef SIGXCPU signal (SIGXCPU, fatal_error_signal); @@ -1988,6 +1996,9 @@ If ARG is an integer, return ARG as the exit program code. If ARG is a string, stuff it as keyboard input. +This function is called upon receipt of the signals SIGTERM +or SIGHUP, and (except on MS-Windows) SIGINT in batch mode. + The value of `kill-emacs-hook', if not void, is a list of functions (of no args), all of which are called before Emacs is actually killed. */) @@ -2000,7 +2011,7 @@ if (feof (stdin)) arg = Qt; - if (!NILP (Vrun_hooks) && !noninteractive) + if (!NILP (Vrun_hooks)) call1 (Vrun_hooks, intern ("kill-emacs-hook")); UNGCPRO; @@ -2421,7 +2432,8 @@ expect to be able to interact with the user. To ask for confirmation, see `kill-emacs-query-functions' instead. -The hook is not run in batch mode, i.e., if `noninteractive' is non-nil. */); +Before Emacs 24.1, the hook was not run in batch mode, i.e., if +`noninteractive' was non-nil. */); Vkill_emacs_hook = Qnil; DEFVAR_INT ("emacs-priority", &emacs_priority,