# HG changeset patch # User Karl Heuer # Date 760953912 0 # Node ID 89c310941fcb2a8c683b852881d8dc46f9d7aab7 # Parent 57c1061d77ff6d529d763db49c640ef8726ea613 (syms_of_keyboard): Add a DEFVAR for command-hook-internal. (command_loop_1): Use it for post-command-hook. (Fexecute_extended_command): Copy this_command_keys as a vector, not a string. diff -r 57c1061d77ff -r 89c310941fcb src/keyboard.c --- a/src/keyboard.c Fri Feb 11 06:03:57 1994 +0000 +++ b/src/keyboard.c Fri Feb 11 08:05:12 1994 +0000 @@ -1201,7 +1201,16 @@ directly_done: ; if (!NILP (Vpost_command_hook)) - call1 (Vrun_hooks, Qpost_command_hook); + { + /* 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; + } /* If there is a prefix argument, 1) We don't want last_command to be ``universal-argument'' @@ -4959,7 +4968,8 @@ Lisp_Object saved_keys; struct gcpro gcpro1; - saved_keys = Fthis_command_keys (); + saved_keys = Fvector (this_command_key_count, + XVECTOR (this_command_keys)->contents); buf[0] = 0; GCPRO1 (saved_keys); @@ -4989,17 +4999,15 @@ function, followed by a RET. */ { struct Lisp_String *str; + Lisp_Object *keys; int i; Lisp_Object tem; this_command_key_count = 0; - str = XSTRING (saved_keys); - for (i = 0; i < str->size; i++) - { - XFASTINT (tem) = str->data[i]; - add_command_key (tem); - } + keys = XVECTOR (saved_keys)->contents; + for (i = 0; i < XVECTOR (saved_keys)->size; i++) + add_command_key (keys[i]); str = XSTRING (function); for (i = 0; i < str->size; i++) @@ -5850,6 +5858,10 @@ Buffer modification stores t in this variable."); Vdeactivate_mark = Qnil; + DEFVAR_LISP ("command-hook-internal", &Vcommand_hook_internal, + "Temporary storage of pre-command-hook or post-command-hook."); + Vcommand_hook_internal = Qnil; + DEFVAR_LISP ("pre-command-hook", &Vpre_command_hook, "Normal hook run before each command is executed."); Vpre_command_hook = Qnil;