Mercurial > emacs
changeset 7428:e14086d8ba6f
(safe_run_hooks): New function, extracted from command_loop_1. Bind
inhibit_quit.
author | Karl Heuer <kwzh@gnu.org> |
---|---|
date | Tue, 10 May 1994 05:48:20 +0000 |
parents | 2ea6fdd2dacf |
children | 5c2347e34b31 |
files | src/keyboard.c |
diffstat | 1 files changed, 22 insertions(+), 30 deletions(-) [+] |
line wrap: on
line diff
--- a/src/keyboard.c Tue May 10 05:45:24 1994 +0000 +++ b/src/keyboard.c Tue May 10 05:48:20 1994 +0000 @@ -900,6 +900,7 @@ Lisp_Object Fcommand_execute (); static int read_key_sequence (); +static void safe_run_hooks (); Lisp_Object command_loop_1 () @@ -926,16 +927,7 @@ /* Make sure this hook runs after commands that get errors and throw to top level. */ if (!NILP (Vpost_command_hook) && !NILP (Vrun_hooks)) - { - /* If we get an error during the post-command-hook, - cause post-command-hook to be nil. */ - Vcommand_hook_internal = Vpost_command_hook; - Vpost_command_hook = Qnil; - - call1 (Vrun_hooks, Qcommand_hook_internal); - - Vpost_command_hook = Vcommand_hook_internal; - } + safe_run_hooks (&Vpost_command_hook); /* Do this after running Vpost_command_hook, for consistency. */ last_command = this_command; @@ -1057,16 +1049,7 @@ this_command = cmd; if (!NILP (Vpre_command_hook) && !NILP (Vrun_hooks)) - { - /* If we get an error during the pre-command-hook, - cause pre-command-hook to be nil. */ - Vcommand_hook_internal = Vpre_command_hook; - Vpre_command_hook = Qnil; - - call1 (Vrun_hooks, Qcommand_hook_internal); - - Vpre_command_hook = Vcommand_hook_internal; - } + safe_run_hooks (&Vpre_command_hook); if (NILP (this_command)) { @@ -1194,16 +1177,7 @@ directly_done: ; if (!NILP (Vpost_command_hook) && !NILP (Vrun_hooks)) - { - /* If we get an error during the post-command-hook, - cause post-command-hook to be nil. */ - Vcommand_hook_internal = Vpost_command_hook; - Vpost_command_hook = Qnil; - - call1 (Vrun_hooks, Qcommand_hook_internal); - - Vpost_command_hook = Vcommand_hook_internal; - } + safe_run_hooks (&Vpost_command_hook); /* If there is a prefix argument, 1) We don't want last_command to be ``universal-argument'' @@ -1233,6 +1207,24 @@ } } } + +/* 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; +{ + int count = specpdl_ptr - specpdl; + specbind (Qinhibit_quit, Qt); + + Vcommand_hook_internal = *hook; + *hook = Qnil; + call1 (Vrun_hooks, Qcommand_hook_internal); + *hook = Vcommand_hook_internal; + + unbind_to (count, Qnil); +} /* Number of seconds between polling for input. */ int polling_period;