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

Sha*_*nce 1 keyboard emacs 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 "))
Run Code Online (Sandbox Code Playgroud)

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

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

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

?\C-l
12
Run Code Online (Sandbox Code Playgroud)

但要绑定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
Run Code Online (Sandbox Code Playgroud)

当我尝试评估时C-tab:

C-tab ; Debugger entered--Lisp error: (void-variable C-tab)
Run Code Online (Sandbox Code Playgroud)

比较矢量的评估:

[?\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.
Run Code Online (Sandbox Code Playgroud)

Tre*_*son 6

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

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

(aref [C-tab] 0)
Run Code Online (Sandbox Code Playgroud)

添加以回应第一条评论.

另一个向量是:

[some-symbol another (a list of things) 9]
Run Code Online (Sandbox Code Playgroud)

它的长度为4

(length [some-symbol another (a list of things) 9])
Run Code Online (Sandbox Code Playgroud)

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

C-tab是一个符号就像在上面的例子中一样some-symbol,another除非它们的值单元格设置为某个值,否则它们没有任何值.