# HG changeset patch # User Kim F. Storm # Date 1013036396 0 # Node ID 241310b1046a3060f3a18ba7a787d40c0390dc2e # Parent d6162a8dc872c0ed92cb32911bde2a4176e0f623 (Vthis_original_command): New variable. (syms_of_keyboard): DEFVAR_LISP it. (command_loop_1): Set it, and perform command remapping. diff -r d6162a8dc872 -r 241310b1046a src/keyboard.c --- a/src/keyboard.c Wed Feb 06 22:58:23 2002 +0000 +++ b/src/keyboard.c Wed Feb 06 22:59:56 2002 +0000 @@ -373,6 +373,10 @@ /* This is like Vthis_command, except that commands never set it. */ Lisp_Object real_this_command; +/* If the lookup of the command returns a binding, the original + command is stored in this-original-command. It is nil otherwise. */ +Lisp_Object Vthis_original_command; + /* The value of point when the last command was executed. */ int last_point_position; @@ -1503,6 +1507,17 @@ reset it before we execute the command. */ Vdeactivate_mark = Qnil; + /* Remap command through active keymaps */ + Vthis_original_command = cmd; + if (is_command_symbol (cmd)) + { + Lisp_Object cmd1; + + cmd1 = Fkey_binding (cmd, Qnil, Qt); + if (!NILP (cmd1) && is_command_symbol (cmd1)) + cmd = cmd1; + } + /* Execute the command. */ Vthis_command = cmd; @@ -6947,7 +6962,7 @@ Lisp_Object prefix; if (!NILP (tem)) - tem = Fkey_binding (tem, Qnil); + tem = Fkey_binding (tem, Qnil, Qnil); prefix = AREF (item_properties, ITEM_PROPERTY_KEYEQ); if (CONSP (prefix)) @@ -6993,7 +7008,7 @@ && SYMBOLP (XSYMBOL (def)->function) && ! NILP (Fget (def, Qmenu_alias))) def = XSYMBOL (def)->function; - tem = Fwhere_is_internal (def, Qnil, Qt, Qnil); + tem = Fwhere_is_internal (def, Qnil, Qt, Qnil, Qt); XSETCAR (cachelist, tem); if (NILP (tem)) { @@ -9408,7 +9423,7 @@ && NILP (Vexecuting_macro) && SYMBOLP (function)) bindings = Fwhere_is_internal (function, Voverriding_local_map, - Qt, Qnil); + Qt, Qnil, Qnil); else bindings = Qnil; @@ -10635,6 +10650,12 @@ will be in `last-command' during the following command. */); Vthis_command = Qnil; + DEFVAR_LISP ("this-original-command", &Vthis_original_command, + doc: /* If non-nil, the original command bound to the current key sequence. +The value of `this-command' is the result of looking up the original +command in the active keymaps. */); + Vthis_original_command = Qnil; + DEFVAR_INT ("auto-save-interval", &auto_save_interval, doc: /* *Number of input events between auto-saves. Zero means disable autosaving due to number of characters typed. */);