2009-05-27 97 views
32

我试图设置一个键盘绑定到Ctrl + Tab在Emacs中。我用下面的调用:Emacs全局设置键到C-TAB

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

但是,每当我用它,我得到一个

<C-tab> is undefined 

错误消息。尝试将绑定设置为“C选项卡”会导致出现错误消息。

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

回答

37
(global-set-key [C-tab] 'my-func) 
+0

感谢[]语法是我出错的地方 – 2016-05-10 23:08:20

3

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

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

也许平凡的语法会有所作为?

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

+1

使用的一大优点`(千桶)`是,你可以使用相同的语法Emacs的回报当你调用`describe-key`时,这使得它完全无关紧要(Trey的回答很好地证明了这一点)。 – phils 2011-08-16 22:40:08

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 
45

不像其他人所说,是用​​一个好主意(或read-kbd-macro这基本上是相同的)的情况下,你想使用在Emacs的其他版本相同的配置文件;​​适用于几个版本的Emacs和XEmacs,其中键序列的内部表示方式不同。

  • 特殊字RET,SPC,TAB,DEL,LFD,ESC,并且NUL表示 特殊:

    (global-set-key (kbd "<C-tab>") 'my-func) 
    

    通过read-kbd-macro使用的输入格式在edmacro-mode文档字符串被记录控制字符。单词必须以大写字母写入。

  • 在尖括号的单词,例如,<返回>,<向下>或< F1>,表示 的功能键。 (请注意,在标准配置中, 功能键<返回>和控制键RET是同义词。) 您可以在RET,SPC等单词上使用尖括号,但它们不是必需的。

这写的有点不幸;在第一个项目符号点中引用的TAB是TAB的ASCII字符,并且添加Control修饰符对它没有任何意义。当您按下Control-Tab时,Emacs会看到它(通过您的窗口系统;它不会在文本终端中工作),如<tab>带有控制修饰符,您可以将其表示为C-<tab><C-tab>

+0

在文本终端的emacs中有``的解决方法吗?我问服务器错误:http://serverfault.com/questions/81688/problem-with-ctrl-tab-keybinding-in-emacs-in-gnome-terminal – Tom 2009-11-05 13:00:41

6

请注意,您也可以通过交互方式致电global-set-key。然后,您可以看到repeat-complex-command正确的绑定命令(也KeybindingGuide见):你想

  • 使用C-x ESC ESCrepeat-complex-command

    1. M-x: global-set-key
    2. 类型的组合键看apropiate命令。你的情况,我得到:

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

    在GNU的Emacs Lisp参考手册,章节21.1 “键序列”,他们参考使用\ t表示tab键。

    使用Lisp的参考手册显示的语法,我会用下面的命令:

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