Allow :keys in menus to be computed dynamically
* doc/lispref/keymaps.texi (Extended Menu Items): Document it (bug#28930). * src/keyboard.c (parse_menu_item): Allow :keys to be a function.
This commit is contained in:
parent
85b8609f95
commit
74d3a1e7d6
3 changed files with 14 additions and 1 deletions
|
@ -2319,6 +2319,12 @@ This property specifies that @var{string} is the string to display
|
|||
as the keyboard equivalent for this menu item. You can use
|
||||
the @samp{\\[...]} documentation construct in @var{string}.
|
||||
|
||||
This property can also be a function (which will be called with no
|
||||
arguments). This function should return a string. This function will
|
||||
be called every time the menu is computed, so using a function that
|
||||
takes a lot of time to compute is not a good idea, and it should
|
||||
expect to be called from any context.
|
||||
|
||||
@item :filter @var{filter-fn}
|
||||
This property provides a way to compute the menu item dynamically.
|
||||
The property value @var{filter-fn} should be a function of one argument;
|
||||
|
|
5
etc/NEWS
5
etc/NEWS
|
@ -134,6 +134,11 @@ with recent versions of Firefox.
|
|||
|
||||
* Lisp Changes in Emacs 29.1
|
||||
|
||||
+++
|
||||
** :keys in 'menu-item' can now be a function.
|
||||
If so, it is called whenever the menu is computed, and can be used to
|
||||
calculate the keys dynamically.
|
||||
|
||||
+++
|
||||
** New major mode 'clean-mode'.
|
||||
This is a new major mode meant for debugging. It kills absolutely all
|
||||
|
|
|
@ -7841,7 +7841,9 @@ parse_menu_item (Lisp_Object item, int inmenubar)
|
|||
else if (EQ (tem, QCkeys))
|
||||
{
|
||||
tem = XCAR (item);
|
||||
if (CONSP (tem) || STRINGP (tem))
|
||||
if (FUNCTIONP (tem))
|
||||
ASET (item_properties, ITEM_PROPERTY_KEYEQ, call0 (tem));
|
||||
else if (CONSP (tem) || STRINGP (tem))
|
||||
ASET (item_properties, ITEM_PROPERTY_KEYEQ, tem);
|
||||
}
|
||||
else if (EQ (tem, QCbutton) && CONSP (XCAR (item)))
|
||||
|
|
Loading…
Add table
Reference in a new issue