mirror of
https://git.savannah.gnu.org/git/emacs.git
synced 2024-12-24 10:38:38 +00:00
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.
This commit is contained in:
parent
08b8ba9fae
commit
9c524fcb89
@ -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.
|
||||
|
@ -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
|
||||
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
|
||||
|
5
etc/NEWS
5
etc/NEWS
@ -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
|
||||
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)
|
||||
|
@ -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
|
||||
|
@ -1698,12 +1698,15 @@ The value is non-nil if there were no errors, nil if errors."
|
||||
(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)
|
||||
|
@ -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)
|
||||
|
18
src/emacs.c
18
src/emacs.c
@ -378,7 +378,7 @@ fatal_error_signal (int sig)
|
||||
{
|
||||
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);
|
||||
@ -1239,6 +1239,14 @@ main (int argc, char **argv)
|
||||
signal (SIGSEGV, fatal_error_signal);
|
||||
#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
|
||||
@ -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 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 @@ all of which are called before Emacs is actually killed. */)
|
||||
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 @@ in other similar situations), functions placed on this hook should not
|
||||
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,
|
||||
|
Loading…
Reference in New Issue
Block a user