changeset 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 d6162a8dc872
children 5943cc278b4c
files src/keyboard.c
diffstat 1 files changed, 24 insertions(+), 3 deletions(-) [+]
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.  */);