]> git.eshelyaron.com Git - emacs.git/commitdiff
(parse_menu_item): Handle `notreal' a bit earlier.
authorStefan Monnier <monnier@iro.umontreal.ca>
Sun, 8 Nov 2009 15:06:50 +0000 (15:06 +0000)
committerStefan Monnier <monnier@iro.umontreal.ca>
Sun, 8 Nov 2009 15:06:50 +0000 (15:06 +0000)
Use `tem' less.  Make sure KEYEQ holds a string or nil (bug#4879).

src/ChangeLog
src/keyboard.c

index 9fb03a341e0c3ad3c5bec92827bdb95c50fb9902..3b9bef861d6815237cd5698b23a96c364d78140f 100644 (file)
@@ -1,3 +1,8 @@
+2009-11-08  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * keyboard.c (parse_menu_item): Handle `notreal' a bit earlier.
+       Use `tem' less.  Make sure KEYEQ holds a string or nil (bug#4879).
+
 2009-11-08  Chong Yidong  <cyd@stupidchicken.com>
 
        * xmenu.c (Fx_popup_menu): Extract event timestamp.  Pass it to
index a6bfb08e5d897f6138b493aa9ca55ba5a5a41d1d..0117dc346f3febfde18e1d16946bfcf0cade3dd7 100644 (file)
@@ -8068,65 +8068,70 @@ parse_menu_item (item, notreal, inmenubar)
   if (inmenubar > 0)
     return 1;
 
-  /* This is a command.  See if there is an equivalent key binding. */
-  tem = AREF (item_properties, ITEM_PROPERTY_KEYEQ);
-  /* The previous code preferred :key-sequence to :keys, so we
-     preserve this behavior.  */
-  if (STRINGP (tem) && !CONSP (keyhint))
-    tem = Fsubstitute_command_keys (tem);
-  else
-    {
-      Lisp_Object prefix = AREF (item_properties, ITEM_PROPERTY_KEYEQ);
-      Lisp_Object keys = Qnil;
+  
+  /* If we only want to precompute equivalent key bindings (which we
+     don't even do any more anyway), stop here.  */
+  if (notreal)
+    return 1;
 
-      if (CONSP (prefix))
-       {
-         def = XCAR (prefix);
-         prefix = XCDR (prefix);
-       }
-      else
-       def = AREF (item_properties, ITEM_PROPERTY_DEF);
+  { /* This is a command.  See if there is an equivalent key binding. */
+    Lisp_Object keyeq = AREF (item_properties, ITEM_PROPERTY_KEYEQ);
 
-      if (CONSP (keyhint) && !NILP (XCAR (keyhint)))
-       {
-         keys = XCAR (keyhint);
-         tem = Fkey_binding (keys, Qnil, Qnil, Qnil);
-
-         /* We have a suggested key.  Is it bound to the command?  */
-         if (NILP (tem)
-             || (!EQ (tem, def)
-                 /* If the command is an alias for another
-                    (such as lmenu.el set it up), check if the
-                    original command matches the cached command.  */
-                 && !(SYMBOLP (def) && EQ (tem, XSYMBOL (def)->function))))
-           keys = Qnil;
-       }
+    /* The previous code preferred :key-sequence to :keys, so we
+       preserve this behavior.  */
+    if (STRINGP (keyeq) && !CONSP (keyhint))
+      keyeq = Fsubstitute_command_keys (keyeq);
+    else
+      {
+       Lisp_Object prefix = keyeq;
+       Lisp_Object keys = Qnil;
+
+       if (CONSP (prefix))
+         {
+           def = XCAR (prefix);
+           prefix = XCDR (prefix);
+         }
+       else
+         def = AREF (item_properties, ITEM_PROPERTY_DEF);
+
+       if (CONSP (keyhint) && !NILP (XCAR (keyhint)))
+         {
+           keys = XCAR (keyhint);
+           tem = Fkey_binding (keys, Qnil, Qnil, Qnil);
+
+           /* We have a suggested key.  Is it bound to the command?  */
+           if (NILP (tem)
+               || (!EQ (tem, def)
+                   /* If the command is an alias for another
+                      (such as lmenu.el set it up), check if the
+                      original command matches the cached command.  */
+                   && !(SYMBOLP (def) && EQ (tem, XSYMBOL (def)->function))))
+             keys = Qnil;
+         }
       
-      if (NILP (keys))
-       keys = Fwhere_is_internal (def, Qnil, Qt, Qnil, Qnil);
+       if (NILP (keys))
+         keys = Fwhere_is_internal (def, Qnil, Qt, Qnil, Qnil);
          
-      if (!NILP (keys))
-       {
-         tem = Fkey_description (keys, Qnil);
-         if (CONSP (prefix))
-           {
-             if (STRINGP (XCAR (prefix)))
-               tem = concat2 (XCAR (prefix), tem);
-             if (STRINGP (XCDR (prefix)))
-               tem = concat2 (tem, XCDR (prefix));
-           }
-         tem = concat2 (build_string ("  "), tem);
-         /* tem = concat3 (build_string ("  ("), tem, build_string (")")); */
-       }
-    }
-  
-
-  /* If we only want to precompute equivalent key bindings, stop here. */
-  if (notreal)
-    return 1;
+       if (!NILP (keys))
+         {
+           tem = Fkey_description (keys, Qnil);
+           if (CONSP (prefix))
+             {
+               if (STRINGP (XCAR (prefix)))
+                 tem = concat2 (XCAR (prefix), tem);
+               if (STRINGP (XCDR (prefix)))
+                 tem = concat2 (tem, XCDR (prefix));
+             }
+           keyeq = concat2 (build_string ("  "), tem);
+           /* keyeq = concat3(build_string("  ("),tem,build_string(")")); */
+         }
+       else
+         keyeq = Qnil;
+      }
 
-  /* If we have an equivalent key binding, use that.  */
-  ASET (item_properties, ITEM_PROPERTY_KEYEQ, tem);
+    /* If we have an equivalent key binding, use that.  */
+    ASET (item_properties, ITEM_PROPERTY_KEYEQ, keyeq);
+  }  
 
   /* Include this when menu help is implemented.
   tem = XVECTOR (item_properties)->contents[ITEM_PROPERTY_HELP];