【发布时间】:2010-10-29 08:14:33
【问题描述】:
我正在尝试在 Emacs 中将键绑定设置为 Ctrl+TAB。我使用了以下调用:
(global-set-key (read-kbd-macro "C-TAB") 'my-func)
但是,每当我使用它时,我都会得到一个
<C-tab> is undefined
错误信息。尝试将绑定设置为“C-tab”会导致错误消息。
如何设置绑定到 C-TAB?
【问题讨论】:
标签: emacs key-bindings
我正在尝试在 Emacs 中将键绑定设置为 Ctrl+TAB。我使用了以下调用:
(global-set-key (read-kbd-macro "C-TAB") 'my-func)
但是,每当我使用它时,我都会得到一个
<C-tab> is undefined
错误信息。尝试将绑定设置为“C-tab”会导致错误消息。
如何设置绑定到 C-TAB?
【问题讨论】:
标签: emacs key-bindings
在 gnu emacs lisp 参考手册第 21.1 节“键序列”中,他们使用 \t 来表示制表键。
使用 Lisp 参考手册中显示的语法,我将使用以下命令:
(global-set-key (kbd "C-\t") 'my-func)
【讨论】:
请注意,您也可以以交互方式调用global-set-key。然后您可以使用repeat-complex-command 查看正确的绑定命令(另请参阅KeybindingGuide):
M-x: global-set-key使用C-x ESC ESC (repeat-complex-command) 查看合适的命令。在你的情况下,我得到:
(global-set-key (quote [C-tab]) (quote my-func))
【讨论】:
与其他人建议的不同,如果您想在其他版本的 Emacs 中使用相同的配置文件,最好使用 kbd(或基本相同的 read-kbd-macro); kbd 适用于 Emacs 和 XEmacs 的多个版本,其中键序列的内部表示不同。
(global-set-key (kbd "<C-tab>") 'my-func)
read-kbd-macro 使用的输入格式记录在edmacro-mode 的文档字符串中:
特殊字RET、SPC、TAB、DEL、LFD、ESC、NUL代表 特殊控制字符。单词必须大写。
尖括号中的单词,例如
、 或 ,表示 一个功能键。 (请注意,在标准配置中, 功能键 和控制键 RET 是同义词。) 您可以在 RET、SPC 等单词上使用尖括号,但它们 那里不需要。
这写得有些遗憾;第一个项目符号中提到的 TAB 是 TAB 的 ASCII 字符,添加 Control 修饰符对它有一些荒谬的作用。当您按下 Control-Tab 时,Emacs 会看到它(通过您的窗口系统;它不会在文本终端中工作)为带有 Control 修饰符的 <tab>,您可以将其表示为 C-<tab> 或 <C-tab>。
【讨论】:
<C-tab> 的解决方法?我问服务器故障:serverfault.com/questions/81688/…
这是因为您错误地使用了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 [C-tab] 'my-func)
【讨论】:
不要使用read-kbd-macro,而是尝试使用更简单的语法?
;(global-set-key [(control tab)] 'my-func)
也许更简单的语法会有所作为?
更多关于read-kbd-macro 和global-set-key。
【讨论】:
(kbd) 的最大优势是您可以使用与调用describe-key 时Emacs 返回的语法相同的语法,这使得处理起来非常简单(正如Trey 的回答所很好地证明的那样) .