有时创建使用相同命令、但启用条件不同的菜单项是很有用的。
目前在 Emacs 中实现此功能的最佳方式是使用扩展菜单项;
在该特性出现之前,可以通过定义别名命令并在菜单项中使用它们来实现。
下面是一个示例,为 read-only-mode 创建两个别名,并为它们设置不同的启用条件:
(defalias 'make-read-only 'read-only-mode) (put 'make-read-only 'menu-enable '(not buffer-read-only)) (defalias 'make-writable 'read-only-mode) (put 'make-writable 'menu-enable 'buffer-read-only)
在菜单中使用别名时,通常需要显示真实命令名称对应的等效按键绑定,
而非别名本身(别名通常除菜单外一般不会绑定任何按键)。
若要实现此效果,可为别名符号设置一个非 nil 的
menu-alias 属性。如下所示:
(put 'make-read-only 'menu-alias t) (put 'make-writable 'menu-alias t)
这样会使 make-read-only 与 make-writable 对应的菜单项
显示 read-only-mode 的键盘绑定。