【问题标题】:Emacs global-set-key to C-TABEmacs 全局设置键到 C-TAB
【发布时间】: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


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

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

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

        (global-set-key (quote [C-tab]) (quote my-func))
        

      【讨论】:

        【解决方案3】:

        与其他人建议的不同,如果您想在其他版本的 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 修饰符的 &lt;tab&gt;,您可以将其表示为 C-&lt;tab&gt;&lt;C-tab&gt;

        【讨论】:

        【解决方案4】:

        这是因为您错误地使用了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)
        

        而且,我不知道如何生成&lt;C-TAB&gt;,但它与&lt;C-tab&gt;不一样。

        (equal (kbd "<C-TAB>") (kbd "<C-tab>"))
        ->
        nil
        

        【讨论】:

          【解决方案5】:
          (global-set-key [C-tab] 'my-func)
          

          【讨论】:

            【解决方案6】:

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

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

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

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

            【讨论】:

            • 使用(kbd) 的最大优势是您可以使用与调用describe-key 时Emacs 返回的语法相同的语法,这使得处理起来非常简单(正如Trey 的回答所很好地证明的那样) .
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2018-12-21
            • 1970-01-01
            • 2011-07-16
            • 2013-10-15
            相关资源
            最近更新 更多