Что такое `[C-tab]` в GNU Emacs? - PullRequest
1 голос
/ 28 октября 2010

Что такое [C-tab] в GNU Emacs?Обратите внимание:

(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 ]

6 голосов
/ 28 октября 2010

[C-tab] - вектор, см. Руководство для векторов .Там вы найдете, что вектор считается постоянным для оценки (то есть он оценивает себя).

Таким образом, [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])

Содержит два символа some-symbol и another, список (a list of things) и целое число 9.

C-tab is символ точно так же, как some-symbol и another в вышеприведенных примерах, они не имеют значения, если их ячейка значения не установлена ​​в какое-либо значение.

4 голосов
/ 28 октября 2010

Попробуйте (kbd "C-TAB"), например (global-set-key (kbd "C-TAB") 'key-binding-test).

Имейте в виду, что сама Tab является управляющей последовательностью ( C-i ), поэтому она может не работать в зависимости от того, где вы находитесь. Например, он точно не будет работать на терминале.

Одна вещь, которую вы можете попытаться увидеть, распознает ли emacs C-TAB, отличный от TAB, это C-h k C-TAB Если справка покажет вам справку только для обычного TAB, вам не повезло. В противном случае он скажет что-то вроде « не определено».

...