为 unix 键盘上的特殊键编写 emacs 键序列



我在 FreeBSD 12 工作站上有一个 unix 键盘,有 10 个特殊键。

Stop  Again
Props Undo
Front Copy
Open  Paste
Find  Cut

并尝试在图形模式下将它们用于 Emacs 26.3 下的快捷方式。一些键符号名称通过 X11 驱动程序映射到 XF86 键名称,如下所示:

Copy   - XF86Copy
Cut    - XF86Cut
Paste  - XF86Paste

并且一些关键符号名称保留在 Sun-Key 命名空间中,例如:

Props  -  SunProps
Front  -  SunFront
Open   -  SunOpen.

我想使用 SunFront 键调用 Emacs 下的一些菜单项,但对于这种序列的扩展版本,得到一个奇怪的结果。两个键绑定定义

(global-set-key [SunFront] 'buffer-menu-open)
(global-set-key [(control SunFront)] 'buffer-menu-open)

运行良好并打开缓冲区菜单。但是如果我尝试扩展序列:

(global-set-key [(control SunFront) (control b)] 'buffer-menu-open)

我收到错误

global-set-key: Key sequence <C-SunFront> C-b starts with non-prefix key <C-SunFront>

.另一方面,序列:

(global-set-key [(control XF86Copy) (control b)] 'buffer-menu-open)

效果很好,并打开预期的菜单。定义 SunFront 设置的 emacs 键序列的正确方法是什么?

您得到的错误是因为您已经绑定了(在同一键盘映射中([(control SunFront)]命令,因此新的定义键将覆盖该定义。 您可以通过在添加新定义之前显式覆盖旧 def 来消除错误:

(global-set-key [(control SunFront)] nil)
(global-set-key [(control SunFront) (control b)] 'buffer-menu-open)

但很可能您需要做的就是删除以前的绑定。

最新更新