我正在尝试在 Emacs 中将键绑定设置为 Ctrl+TAB。我使用了以下调用:
(global-set-key (read-kbd-macro "C-TAB") 'my-func)
但是,每当我使用它时,我都会得到一个
<C-tab> is undefined
错误信息。尝试将绑定设置为“C-tab”会导致错误消息。
如何设置绑定到 C-TAB?
我正在尝试在 Emacs 中将键绑定设置为 Ctrl+TAB。我使用了以下调用:
(global-set-key (read-kbd-macro "C-TAB") 'my-func)
但是,每当我使用它时,我都会得到一个
<C-tab> is undefined
错误信息。尝试将绑定设置为“C-tab”会导致错误消息。
如何设置绑定到 C-TAB?
与其他人建议的不同,如果您想在其他版本的 Emacs 中使用相同的配置文件,最好使用kbd
(或基本上相同的东西);适用于 Emacs 和 XEmacs 的多个版本,其中键序列的内部表示不同。read-kbd-macro
kbd
(global-set-key (kbd "<C-tab>") 'my-func)
使用的输入格式read-kbd-macro
记录在以下文档字符串中edmacro-mode
:
特殊字 RET、SPC、TAB、DEL、LFD、ESC 和 NUL 表示特殊控制字符。单词必须大写。
尖括号中的单词,例如<return>、<down> 或<f1>,代表一个功能键。(注意,在标准配置中,功能键<return> 和控制键RET 是同义词。)您可以在RET、SPC 等单词上使用尖括号,但这里不需要它们。
这写得有些遗憾;第一个项目符号中提到的 TAB 是 TAB 的 ASCII 字符,添加 Control 修饰符对它有一些荒谬的作用。当您按下 Control-Tab 时,Emacs 会看到它(通过您的窗口系统;它不会在文本终端中工作)<tab>
与 Control 修饰符一样,您可以将其表示为C-<tab>
或<C-tab>
。
(global-set-key [C-tab] 'my-func)
那是因为你使用read-kbd-macro
不当。当您看到绑定到键的内容时:
C-h k C-TAB
Emacs 告诉你:
<C-tab> is undefined.
您需要在调用read-kbd-macro
.
(global-set-key (read-kbd-macro "<C-tab>") 'my-func)
而且,我不知道如何生成<C-TAB>
,但它与<C-tab>
.
(equal (kbd "<C-TAB>") (kbd "<C-tab>"))
->
nil
请注意,您也可以global-set-key
交互调用。然后,您可以看到正确的绑定命令repeat-complex-command
(另请参见KeybindingGuide):
M-x: global-set-key
使用C-x ESC ESC
( repeat-complex-command
) 查看 apropiate 命令。在你的情况下,我得到:
(global-set-key (quote [C-tab]) (quote my-func))
而不是 using read-kbd-macro
,尝试使用更简单的语法?
;(global-set-key [(control tab)] 'my-func)
也许更简单的语法会有所作为?
在 gnu emacs lisp 参考手册第 21.1 节“键序列”中,他们使用 \t 来表示制表键。
使用 Lisp 参考手册中显示的语法,我将使用以下命令:
(global-set-key (kbd "C-\t") 'my-func)