An extended-format menu item is a more flexible and also cleaner
alternative to the simple format. You define an event type with a
binding that's a list starting with the symbol
For a non-selectable string, the binding looks like this:
A string starting with two or more dashes specifies a separator line; see Menu Separators.
To define a real menu item which can be selected, the extended format binding looks like this:
(menu-item item-name real-binding . item-property-list)
Here, item-name is an expression which evaluates to the menu item string. Thus, the string need not be a constant. The third element, real-binding, is the command to execute. The tail of the list, item-property-list, has the form of a property list which contains other information.
Here is a table of the properties that are supported:
nilmeans yes). If the item is not enabled, you can't really click on it.
nilmeans yes). If the item does not appear, then the menu is displayed as if this item were not defined at all.
help-echotext properties (see Help display). Note that this must be a constant string, unlike the
help-echoproperty for text and overlays.
:radio. The cdr, selected, should be a form; the result of evaluating it says whether this button is currently selected.
A toggle is a menu item which is labeled as either “on” or “off”
according to the value of selected. The command itself should
toggle selected, setting it to
t if it is
nil if it is
t. Here is how the menu item
to toggle the
debug-on-error flag is defined:
(menu-item "Debug on Error" toggle-debug-on-error :button (:toggle . (and (boundp 'debug-on-error) debug-on-error)))
This works because
toggle-debug-on-error is defined as a command
which toggles the variable
Radio buttons are a group of menu items, in which at any time one
and only one is “selected”. There should be a variable whose value
says which one is selected at any time. The selected form for
each radio button in the group should check whether the variable has the
right value for selecting that button. Clicking on the button should
set the variable so that the button you clicked on becomes selected.
If you specify the wrong key sequence, it has no effect; before Emacs
displays key-sequence in the menu, it verifies that
key-sequence is really equivalent to this menu item.
However, if the user has rebound this item's definition to a key
sequence, Emacs ignores the
:keys property and finds the keyboard
Emacs can call this function at any time that it does redisplay or operates on menu data structures, so you should write it so it can safely be called at any time.