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

Compose emacs key sequence for special keys on an unix keyboard

我在 FreeBSD 12 工作站上有一个 unix keyboard,带有 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 之前显式覆盖旧的 def 来消除错误:

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

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