Emacs全球集合C-TAB的关键

Mar*_*ote 38 emacs key-bindings

我正在尝试在Emacs中设置一个键绑定到Ctrl + TAB.我用了以下电话:

(global-set-key (read-kbd-macro "C-TAB") 'my-func)
Run Code Online (Sandbox Code Playgroud)

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

<C-tab> is undefined
Run Code Online (Sandbox Code Playgroud)

错误信息.尝试将绑定设置为"C-tab"会导致出现错误消息.

如何设置我对C-TAB的绑定?

Jou*_*nen 51

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

(global-set-key (kbd "<C-tab>") 'my-func)
Run Code Online (Sandbox Code Playgroud)

使用的输入格式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>.


Nat*_*ath 43

(global-set-key [C-tab] 'my-func)
Run Code Online (Sandbox Code Playgroud)


Tre*_*son 11

这是因为你使用read-kbd-macro不当.当您看到绑定到键的内容时:

C-h k C-TAB
Run Code Online (Sandbox Code Playgroud)

Emacs告诉你:

<C-tab> is undefined.
Run Code Online (Sandbox Code Playgroud)

您需要在调用中包含<> read-kbd-macro.

(global-set-key (read-kbd-macro "<C-tab>") 'my-func)
Run Code Online (Sandbox Code Playgroud)

并且,我不知道如何生成<C-TAB>,但它不一样<C-tab>.

(equal (kbd "<C-TAB>") (kbd "<C-tab>"))
->
nil
Run Code Online (Sandbox Code Playgroud)


dan*_*poe 6

请注意,您也可以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))
    
    Run Code Online (Sandbox Code Playgroud)