我在带有10个特殊键的FreeBSD 12工作站上具有unix keyboard。
Stop Again
Props Undo
Front Copy
Open Paste
Find Cut
并尝试在图形模式下的Emacs 26.3下将它们用于快捷方式。一些键符号名称通过X11驱动程序映射到XF86-Key名称,例如:
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)]
绑定到命令,所以新的define-key将覆盖该定义。您可以通过在添加新def之前显式覆盖旧def来消除错误:
(global-set-key [(control SunFront)] nil)
(global-set-key [(control SunFront) (control b)] 'buffer-menu-open)
但是您最可能需要做的是改为删除以前的绑定。