]> git.eshelyaron.com Git - emacs.git/commitdiff
(safe_run_hooks_1, safe_run_hooks_error): New subroutines.
authorRichard M. Stallman <rms@gnu.org>
Mon, 24 Apr 1995 21:50:39 +0000 (21:50 +0000)
committerRichard M. Stallman <rms@gnu.org>
Mon, 24 Apr 1995 21:50:39 +0000 (21:50 +0000)
(safe_run_hooks): Handle errors to clear the hook,
instead of always clearing it temporarily.

src/keyboard.c

index 623ea4efd19210fe572b13842099cb8c0b2e7936..de23b958568279c0a8b66b4c8d8ae1813728fb49 100644 (file)
@@ -1401,23 +1401,37 @@ command_loop_1 ()
     }
 }
 
+/* Subroutine for safe_run_hooks: run the hook HOOK.  */
+
+static Lisp_Object
+safe_run_hooks_1 (hook)
+     Lisp_Object hook;
+{
+  return call1 (Vrun_hooks, Vinhibit_quit);
+}
+
+/* Subroutine for safe_run_hooks: handle an error by clearing out the hook.  */
+
+static Lisp_Object
+safe_run_hooks_error (data)
+     Lisp_Object data;
+{
+  Fset (Vinhibit_quit, Qnil);
+}
+
 /* If we get an error while running the hook, cause the hook variable
    to be nil.  Also inhibit quits, so that C-g won't cause the hook
    to mysteriously evaporate.  */
+
 static void
 safe_run_hooks (hook)
      Lisp_Object hook;
 {
   Lisp_Object value;
   int count = specpdl_ptr - specpdl;
-  specbind (Qinhibit_quit, Qt);
-
-  /* We read and set the variable with functions,
-     in case it's buffer-local.  */
-  value = Vcommand_hook_internal = Fsymbol_value (hook);
-  Fset (hook, Qnil);
-  call1 (Vrun_hooks, Qcommand_hook_internal);
-  Fset (hook, value);
+  specbind (Qinhibit_quit, hook);
+
+  internal_condition_case (safe_run_hooks_1, Qerror, safe_run_hooks_error);
 
   unbind_to (count, Qnil);
 }