Mercurial > emacs
diff src/keyboard.c @ 43154:241310b1046a
(Vthis_original_command): New variable.
(syms_of_keyboard): DEFVAR_LISP it.
(command_loop_1): Set it, and perform command remapping.
author | Kim F. Storm <storm@cua.dk> |
---|---|
date | Wed, 06 Feb 2002 22:59:56 +0000 |
parents | a50d91dfe5f8 |
children | a8329a91e9b5 |
line wrap: on
line diff
--- 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. */);