在GNU Emacs中,什么是“[C-tab]”?

时间:2010-10-28 18:00:39

标签: emacs keyboard elisp

在GNU Emacs中,[C-tab]是什么?考虑:

(version)
"GNU Emacs 23.2.1 (i386-mingw-nt5.1.2600)
 of 2010-05-08 on G41R2F1"

(defun key-binding-test ()
  (interactive)
  (insert " key-binding-test called "))

对于单个字母控制字符,必须在向量中使用字符常量:

(global-set-key [C-l] 'key-binding-test) ; does not work
(global-set-key [?\C-l] 'key-binding-test) ; works

?\C-l可以在*scratch*缓冲区中进行评估:

?\C-l
12

但要绑定 C-Tab

(global-set-key [?\C-tab] 'key-binding-test) ;does not work
    ; Debugger entered--Lisp error: (invalid-read-syntax "?")
(global-set-key [C-tab] 'key-binding-test) ; works

当我尝试评估C-tab时:

C-tab ; Debugger entered--Lisp error: (void-variable C-tab)

比较载体的评估:

[?\C-l] ; input
[12]    ; result

[C-tab] ; input
[C-tab] ; result

(aref [C-tab] 0) ; input
C-tab            ; result, but C-tab can not be evaulated further.

2 个答案:

答案 0 :(得分:6)

[C-tab]是一个向量,请参阅vectors的手册。在那里你会发现一个向量被认为是不变的评估(即它评估自己)。

因此[C-tab]评估为[C-tab],一个元素的向量,符号C-tab,您可以像这样提取

(aref [C-tab] 0)

在回复第一条评论时添加

另一个向量是:

[some-symbol another (a list of things) 9]

长度为4

(length [some-symbol another (a list of things) 9])

它包含两个symbols some-symbolanother,一个列表(a list of things)和一个整数9

C-tab只是symbol,就像上面示例中的some-symbolanother一样,除非将value cell设置为某个值,否则它们没有任何价值。< / p>

答案 1 :(得分:4)

尝试(kbd "C-TAB"),例如(global-set-key (kbd "C-TAB") 'key-binding-test)

请记住,虽然Tab本身是一个控制序列( C-i ),但根据您所处的位置,它可能无法正常工作。例如,它肯定不会在终端上运行。

您可以尝试查看emacs是否能识别与TAB不同的C-TAB, C-h k C-TAB 。如果帮助显示正常TAB的帮助,那你就不走运了。否则它会说“&lt; C-tab&gt;未定义”。