下列宏提供了一种便捷方式,用于定义弹出菜单和/或菜单栏菜单。
该宏定义一个弹出菜单和/或菜单栏子菜单,内容由 menu 指定。
若 symbol 非 nil,则它应为一个符号;
此时该宏会将 symbol 定义为用于弹出菜单的函数(see Pop-Up Menus),
并以 doc 作为其文档字符串。
它同时会将 symbol 定义为变量,其值为该菜单。
symbol 不需要加引号。
无论 symbol 取值如何,若 maps 是一个按键映射, 该菜单会被添加到该映射中,作为菜单栏的顶层菜单(see 菜单栏)。 maps 也可以是一个按键映射列表,此时菜单会被分别添加到每个映射中。
menu 的第一个元素必须是字符串,作为菜单标签。 其后可以跟随任意数量的下列关键字-参数对:
:filter functionfunction 必须是一个函数,当以一个参数(其他菜单项的列表)调用时, 返回菜单中实际要显示的项。
:visible includeinclude 是一个表达式;若其求值为 nil,则菜单设为不可见。
:included 是 :visible 的别名。
:active enableenable 是一个表达式;若其求值为 nil,则菜单不可选中。
:enable 是 :active 的别名。
menu 中剩余的元素为菜单项。
一个菜单项可以是包含三个元素的向量:[name callback enable]。
name 是菜单项名称(字符串)。
callback 是选中该项时运行的命令或要执行的表达式。
enable 是一个表达式;若求值为 nil,该项禁用不可选。
此外,菜单项也可以采用如下形式:
[ name callback [ keyword arg ]... ]
其中 name 和 callback 含义同上, 每个可选的 keyword 和 arg 对为下列之一:
:keys keyskeys 是一个字符串,作为菜单项的键盘等效键显示。
通常不需要此项,因为等效键会自动计算。
keys 在显示前会通过 substitute-command-keys 展开(see 文档中的按键绑定替换)。
:key-sequence keyskeys 用于提示显示哪个按键序列作为等效键, 适用于命令绑定了多个按键序列的情况。 若 keys 未绑定到与该菜单项相同的命令,则无效果。
:active enableenable 是一个表达式;若求值为 nil,该项设为不可选。
:enable 是 :active 的别名。
:visible includeinclude 是一个表达式;若求值为 nil,该项设为不可见。
:included 是 :visible 的别名。
:label formform 是一个表达式,求值后结果作为菜单项标签(默认为 name)。
:suffix formform 是一个动态求值的表达式,其结果会拼接到菜单项标签后。
:style stylestyle 是描述菜单项类型的符号;
可以是 toggle(复选框)、radio(单选按钮),
或其他值(表示普通菜单项)。
:selected selectedselected 是一个表达式;
当表达式值非 nil 时,复选框或单选按钮为选中状态。
:help helphelp 是描述该菜单项的字符串。
菜单项也可以是一个字符串,此时该字符串会以不可选文本形式显示在菜单中。 由短横线组成的字符串会显示为分隔线(see 菜单分隔线)。
菜单项还可以是一个格式与 menu 相同的列表,表示子菜单。
下面是使用 easy-menu-define 定义菜单的示例,
效果与 菜单栏 中的示例菜单类似:
(easy-menu-define words-menu global-map
"Menu for word navigation commands."
'("Words"
["Forward word" forward-word]
["Backward word" backward-word]))