]> git.eshelyaron.com Git - emacs.git/commitdiff
Run kill-emacs-hook in batch mode, and on SIGINT in batch mode.
authorGlenn Morris <rgm@gnu.org>
Sat, 2 Oct 2010 02:30:11 +0000 (19:30 -0700)
committerGlenn Morris <rgm@gnu.org>
Sat, 2 Oct 2010 02:30:11 +0000 (19:30 -0700)
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.

doc/lispref/ChangeLog
doc/lispref/os.texi
etc/NEWS
lisp/ChangeLog
lisp/emacs-lisp/bytecomp.el
src/ChangeLog
src/emacs.c

index ec065e9ce76ca1ff1f5a21ca26c99da5b8bc17fe..dfa070e70b3ad2937bfb2e17417abbe0fffd9bce 100644 (file)
@@ -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.
index dd8272342721e7967703ca93b71fa1eba1d5e0c8..8548ce0504712ca0d213e0bb2ce2b6b2a070a094 100644 (file)
@@ -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
index e6ada72c072c23e8f916445331e9f0b3d204c1c0..71cdcb2a64a7d81f1333625d642894b2f3eab4b0 100644 (file)
--- a/etc/NEWS
+++ b/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)
index 235aec2f4787e2b0f8d82319d9bea2cf8f6a1910..b780f0b0fd6b32e1e52178e04e36ad2b3b05e254 100644 (file)
@@ -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
index e6ca7f66546a0d2155f0bc0c47bcfe17f1328206..56661b6afcdf44c6c539b1f2801e17bdf6fe8bac 100644 (file)
@@ -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)
index 70a7d43c32066977ff29e8500ce879d1e7612f17..a87b0bc49c23b917f5ecd781b4f287d14d31ffd3 100644 (file)
@@ -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)
index 397b6d1ce8871f2e1557ff66d8ee0cad43063730..7eba690cb8a127a8b08e3f2cbc5905f156014663 100644 (file)
@@ -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,