]> git.eshelyaron.com Git - emacs.git/commitdiff
(get_keyelt): For menu-items containing a `:filter
authorGerd Moellmann <gerd@gnu.org>
Mon, 26 Jun 2000 15:05:03 +0000 (15:05 +0000)
committerGerd Moellmann <gerd@gnu.org>
Mon, 26 Jun 2000 15:05:03 +0000 (15:05 +0000)
FILTER', apply FILTER to the menu-item's definition to get the
real definition to use.

src/ChangeLog
src/keymap.c

index 62777f6b99811e0f25de9038811030ac1e8a03fe..842c3652748e2b822594b246c00a494619343537 100644 (file)
@@ -1,5 +1,11 @@
 2000-06-26  Gerd Moellmann  <gerd@gnu.org>
 
+       * keymap.c (get_keyelt): For menu-items containing a `:filter
+       FILTER', apply FILTER to the menu-item's definition to get the
+       real definition to use.
+
+       * lisp.h (QCfilter): External declaration.
+
        * xfns.c (Fimage_size): New function.
        (syms_of_xfns): Defsubr it.
 
@@ -54,7 +60,7 @@
        include time.h, done by systime.h.
        [__FreeBSD__]: Remove redundant includes.
 
-       * callproc.c: (setpgrp): Undefine before defining.
+       * callproc.c (setpgrp): Undefine before defining.
        (delete_temp_file): Return Qnil to avoid warning.
 
        * config.in (HAVE_TERM_H, HAVE_STRUCT_TIMEZONE): Add.
index 371b6571c7628616d80c0def05c75fd667332b84..11d8ab860a545fa0608737c49bfe87f074560523 100644 (file)
@@ -578,15 +578,30 @@ get_keyelt (object, autoload)
 
       /* If the keymap contents looks like (menu-item name . DEFN)
         or (menu-item name DEFN ...) then use DEFN.
-        This is a new format menu item.
-      */
+        This is a new format menu item.  */
       else if (EQ (XCAR (object), Qmenu_item))
        {
          if (CONSP (XCDR (object)))
            {
+             Lisp_Object tem;
+
              object = XCDR (XCDR (object));
+             tem = object;
              if (CONSP (object))
                object = XCAR (object);
+
+             /* If there's a `:filter FILTER', apply FILTER to the
+                menu-item's definition to get the real definition to
+                use.  */
+             for (; CONSP (tem) && CONSP (XCDR (tem)); tem = XCDR (tem))
+               if (EQ (XCAR (tem), QCfilter))
+                 {
+                   Lisp_Object filter;
+                   filter = XCAR (XCDR (tem));
+                   filter = list2 (filter, list2 (Qquote, object));
+                   object = menu_item_eval_property (filter);
+                   break;
+                 }
            }
          else
            /* Invalid keymap */