23.18.8 简易菜单

下列宏提供了一种便捷方式,用于定义弹出菜单和/或菜单栏菜单。

Macro: easy-menu-define symbol maps doc menu

该宏定义一个弹出菜单和/或菜单栏子菜单,内容由 menu 指定。

symbolnil,则它应为一个符号; 此时该宏会将 symbol 定义为用于弹出菜单的函数(see Pop-Up Menus), 并以 doc 作为其文档字符串。 它同时会将 symbol 定义为变量,其值为该菜单。 symbol 不需要加引号。

无论 symbol 取值如何,若 maps 是一个按键映射, 该菜单会被添加到该映射中,作为菜单栏的顶层菜单(see 菜单栏)。 maps 也可以是一个按键映射列表,此时菜单会被分别添加到每个映射中。

menu 的第一个元素必须是字符串,作为菜单标签。 其后可以跟随任意数量的下列关键字-参数对:

:filter function

function 必须是一个函数,当以一个参数(其他菜单项的列表)调用时, 返回菜单中实际要显示的项。

:visible include

include 是一个表达式;若其求值为 nil,则菜单设为不可见。 :included:visible 的别名。

:active enable

enable 是一个表达式;若其求值为 nil,则菜单不可选中。 :enable:active 的别名。

menu 中剩余的元素为菜单项。

一个菜单项可以是包含三个元素的向量:[name callback enable]name 是菜单项名称(字符串)。 callback 是选中该项时运行的命令或要执行的表达式。 enable 是一个表达式;若求值为 nil,该项禁用不可选。

此外,菜单项也可以采用如下形式:

   [ name callback [ keyword arg ]... ]

其中 namecallback 含义同上, 每个可选的 keywordarg 对为下列之一:

:keys keys

keys 是一个字符串,作为菜单项的键盘等效键显示。 通常不需要此项,因为等效键会自动计算。 keys 在显示前会通过 substitute-command-keys 展开(see 文档中的按键绑定替换)。

:key-sequence keys

keys 用于提示显示哪个按键序列作为等效键, 适用于命令绑定了多个按键序列的情况。 若 keys 未绑定到与该菜单项相同的命令,则无效果。

:active enable

enable 是一个表达式;若求值为 nil,该项设为不可选。 :enable:active 的别名。

:visible include

include 是一个表达式;若求值为 nil,该项设为不可见。 :included:visible 的别名。

:label form

form 是一个表达式,求值后结果作为菜单项标签(默认为 name)。

:suffix form

form 是一个动态求值的表达式,其结果会拼接到菜单项标签后。

:style style

style 是描述菜单项类型的符号; 可以是 toggle(复选框)、radio(单选按钮), 或其他值(表示普通菜单项)。

:selected selected

selected 是一个表达式; 当表达式值非 nil 时,复选框或单选按钮为选中状态。

:help help

help 是描述该菜单项的字符串。

菜单项也可以是一个字符串,此时该字符串会以不可选文本形式显示在菜单中。 由短横线组成的字符串会显示为分隔线(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]))

emacs

Emacs

org-mode

Orgmode

Donations

打赏

Copyright

© Jasper Hsu

Creative Commons

Creative Commons

Attribute

Attribute

Noncommercial

Noncommercial

Share Alike

Share Alike