Commit 9c524fcb authored by Glenn Morris's avatar Glenn Morris

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.
parent 08b8ba9f
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> 2010-09-18 Stefan Monnier <monnier@iro.umontreal.ca>
* text.texi (Special Properties): Clarify when modification-hooks run. * text.texi (Special Properties): Clarify when modification-hooks run.
......
...@@ -577,7 +577,6 @@ does not run the remaining functions in this hook. Calling ...@@ -577,7 +577,6 @@ does not run the remaining functions in this hook. Calling
This variable is a normal hook; once @code{save-buffers-kill-emacs} is This variable is a normal hook; once @code{save-buffers-kill-emacs} is
finished with all file saving and confirmation, it calls finished with all file saving and confirmation, it calls
@code{kill-emacs} which runs the functions in this hook. @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{kill-emacs} may be invoked directly (that is not via
@code{save-buffers-kill-emacs}) if the terminal is disconnected, or in @code{save-buffers-kill-emacs}) if the terminal is disconnected, or in
......
...@@ -149,6 +149,11 @@ get and set the SELinux context of a file. ...@@ -149,6 +149,11 @@ get and set the SELinux context of a file.
*** Tramp offers handlers for file-selinux-context and set-file-selinux-context *** Tramp offers handlers for file-selinux-context and set-file-selinux-context
for remote machines which support SELinux. 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' ** 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 (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) of buffer at first key-press (instead moves to top/bottom of buffer)
......
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> 2010-10-01 Lars Magne Ingebrigtsen <larsi@gnus.org>
* net/tls.el (tls-starttls-switches): Give up on using starttls with * net/tls.el (tls-starttls-switches): Give up on using starttls with
......
...@@ -1698,12 +1698,15 @@ The value is non-nil if there were no errors, nil if errors." ...@@ -1698,12 +1698,15 @@ The value is non-nil if there were no errors, nil if errors."
(insert "\n") ; aaah, unix. (insert "\n") ; aaah, unix.
(if (file-writable-p target-file) (if (file-writable-p target-file)
;; We must disable any code conversion here. ;; We must disable any code conversion here.
(let ((coding-system-for-write 'no-conversion) (let* ((coding-system-for-write 'no-conversion)
;; Write to a tempfile so that if another Emacs ;; Write to a tempfile so that if another Emacs
;; process is trying to load target-file (eg in a ;; process is trying to load target-file (eg in a
;; parallel bootstrap), it does not risk getting a ;; parallel bootstrap), it does not risk getting a
;; half-finished file. (Bug#4196) ;; half-finished file. (Bug#4196)
(tempfile (make-temp-name target-file))) (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)) (if (memq system-type '(ms-dos 'windows-nt))
(setq buffer-file-type t)) (setq buffer-file-type t))
(write-region (point-min) (point-max) tempfile nil 1) (write-region (point-min) (point-max) tempfile nil 1)
......
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> 2010-10-02 Lars Magne Ingebrigtsen <larsi@gnus.org>
* xml.c (Flibxml_parse_xml_region, Flibxml_parse_html_region) * xml.c (Flibxml_parse_xml_region, Flibxml_parse_html_region)
......
...@@ -378,7 +378,7 @@ fatal_error_signal (int sig) ...@@ -378,7 +378,7 @@ fatal_error_signal (int sig)
{ {
fatal_error_in_progress = 1; fatal_error_in_progress = 1;
if (sig == SIGTERM || sig == SIGHUP) if (sig == SIGTERM || sig == SIGHUP || sig == SIGINT)
Fkill_emacs (make_number (sig)); Fkill_emacs (make_number (sig));
shut_down_emacs (sig, 0, Qnil); shut_down_emacs (sig, 0, Qnil);
...@@ -1239,6 +1239,14 @@ main (int argc, char **argv) ...@@ -1239,6 +1239,14 @@ main (int argc, char **argv)
signal (SIGSEGV, fatal_error_signal); signal (SIGSEGV, fatal_error_signal);
#ifdef SIGSYS #ifdef SIGSYS
signal (SIGSYS, fatal_error_signal); 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 #endif
signal (SIGTERM, fatal_error_signal); signal (SIGTERM, fatal_error_signal);
#ifdef SIGXCPU #ifdef SIGXCPU
...@@ -1988,6 +1996,9 @@ DEFUN ("kill-emacs", Fkill_emacs, Skill_emacs, 0, 1, "P", ...@@ -1988,6 +1996,9 @@ DEFUN ("kill-emacs", Fkill_emacs, Skill_emacs, 0, 1, "P",
If ARG is an integer, return ARG as the exit program code. If ARG is an integer, return ARG as the exit program code.
If ARG is a string, stuff it as keyboard input. 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, The value of `kill-emacs-hook', if not void,
is a list of functions (of no args), is a list of functions (of no args),
all of which are called before Emacs is actually killed. */) all of which are called before Emacs is actually killed. */)
...@@ -2000,7 +2011,7 @@ all of which are called before Emacs is actually killed. */) ...@@ -2000,7 +2011,7 @@ all of which are called before Emacs is actually killed. */)
if (feof (stdin)) if (feof (stdin))
arg = Qt; arg = Qt;
if (!NILP (Vrun_hooks) && !noninteractive) if (!NILP (Vrun_hooks))
call1 (Vrun_hooks, intern ("kill-emacs-hook")); call1 (Vrun_hooks, intern ("kill-emacs-hook"));
UNGCPRO; UNGCPRO;
...@@ -2421,7 +2432,8 @@ in other similar situations), functions placed on this hook should not ...@@ -2421,7 +2432,8 @@ in other similar situations), functions placed on this hook should not
expect to be able to interact with the user. To ask for confirmation, expect to be able to interact with the user. To ask for confirmation,
see `kill-emacs-query-functions' instead. 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; Vkill_emacs_hook = Qnil;
DEFVAR_INT ("emacs-priority", &emacs_priority, DEFVAR_INT ("emacs-priority", &emacs_priority,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment