40

我正在尝试在 Emacs 中将键绑定设置为 Ctrl+TAB。我使用了以下调用:

(global-set-key (read-kbd-macro "C-TAB") 'my-func)

但是,每当我使用它时,我都会得到一个

<C-tab> is undefined

错误信息。尝试将绑定设置为“C-tab”会导致错误消息。

如何设置绑定到 C-TAB?

4

6 回答 6

53

与其他人建议的不同,如果您想在其他版本的 Emacs 中使用相同的配置文件,最好使用kbd(或基本上相同的东西);适用于 Emacs 和 XEmacs 的多个版本,其中键序列的内部表示不同。read-kbd-macrokbd

(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>

于 2009-05-27T17:30:38.090 回答
46
(global-set-key [C-tab] 'my-func)
于 2009-05-27T17:02:57.290 回答
11

那是因为你使用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
于 2009-05-27T17:29:12.120 回答
7

请注意,您也可以global-set-key交互调用。然后,您可以看到正确的绑定命令repeat-complex-command(另请参见KeybindingGuide):

  1. M-x: global-set-key
  2. 键入您想要的组合键
  3. 使用C-x ESC ESC( repeat-complex-command) 查看 apropiate 命令。在你的情况下,我得到:

    (global-set-key (quote [C-tab]) (quote my-func))
    
于 2009-05-28T07:12:31.320 回答
3

而不是 using read-kbd-macro,尝试使用更简单的语法?

;(global-set-key [(control tab)] 'my-func)

也许更简单的语法会有所作为?

更多关于read-kbd-macroglobal-set-key

于 2009-05-27T17:01:24.127 回答
0

在 gnu emacs lisp 参考手册第 21.1 节“键序列”中,他们使用 \t 来表示制表键。

使用 Lisp 参考手册中显示的语法,我将使用以下命令:

(global-set-key (kbd "C-\t") 'my-func)

于 2016-12-27T03:55:10.890 回答