diff options
| author | Gerd Moellmann | 2000-06-26 15:05:03 +0000 |
|---|---|---|
| committer | Gerd Moellmann | 2000-06-26 15:05:03 +0000 |
| commit | 3fc720e4bde612fa3943745d06bd2968c123e561 (patch) | |
| tree | 995e693e4cbf85e0b681f21f5fa7959d5c2ed724 /src/keymap.c | |
| parent | 1425dcb619137a3cbd8393fd0db0fba1a5e0b059 (diff) | |
| download | emacs-3fc720e4bde612fa3943745d06bd2968c123e561.tar.gz emacs-3fc720e4bde612fa3943745d06bd2968c123e561.zip | |
(get_keyelt): For menu-items containing a `:filter
FILTER', apply FILTER to the menu-item's definition to get the
real definition to use.
Diffstat (limited to 'src/keymap.c')
| -rw-r--r-- | src/keymap.c | 19 |
1 files changed, 17 insertions, 2 deletions
diff --git a/src/keymap.c b/src/keymap.c index 371b6571c76..11d8ab860a5 100644 --- a/src/keymap.c +++ b/src/keymap.c | |||
| @@ -578,15 +578,30 @@ get_keyelt (object, autoload) | |||
| 578 | 578 | ||
| 579 | /* If the keymap contents looks like (menu-item name . DEFN) | 579 | /* If the keymap contents looks like (menu-item name . DEFN) |
| 580 | or (menu-item name DEFN ...) then use DEFN. | 580 | or (menu-item name DEFN ...) then use DEFN. |
| 581 | This is a new format menu item. | 581 | This is a new format menu item. */ |
| 582 | */ | ||
| 583 | else if (EQ (XCAR (object), Qmenu_item)) | 582 | else if (EQ (XCAR (object), Qmenu_item)) |
| 584 | { | 583 | { |
| 585 | if (CONSP (XCDR (object))) | 584 | if (CONSP (XCDR (object))) |
| 586 | { | 585 | { |
| 586 | Lisp_Object tem; | ||
| 587 | |||
| 587 | object = XCDR (XCDR (object)); | 588 | object = XCDR (XCDR (object)); |
| 589 | tem = object; | ||
| 588 | if (CONSP (object)) | 590 | if (CONSP (object)) |
| 589 | object = XCAR (object); | 591 | object = XCAR (object); |
| 592 | |||
| 593 | /* If there's a `:filter FILTER', apply FILTER to the | ||
| 594 | menu-item's definition to get the real definition to | ||
| 595 | use. */ | ||
| 596 | for (; CONSP (tem) && CONSP (XCDR (tem)); tem = XCDR (tem)) | ||
| 597 | if (EQ (XCAR (tem), QCfilter)) | ||
| 598 | { | ||
| 599 | Lisp_Object filter; | ||
| 600 | filter = XCAR (XCDR (tem)); | ||
| 601 | filter = list2 (filter, list2 (Qquote, object)); | ||
| 602 | object = menu_item_eval_property (filter); | ||
| 603 | break; | ||
| 604 | } | ||
| 590 | } | 605 | } |
| 591 | else | 606 | else |
| 592 | /* Invalid keymap */ | 607 | /* Invalid keymap */ |