2010-10-28 3 views
1

В GNU Emacs, что такое [C-tab]? Рассмотрим:В 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 

Когда я пытаюсь evalulate 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. 

ответ

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

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

C-tab является symbol так же, как и some-symbolanother в приведенных выше примерах, они не имеют никакой ценности, если их value cell не установлен на что-то.

+0

И '(isf [C-tab] 0)' возвращает 'C-tab', который я не могу оценить. Поэтому сам по себе я не могу смотреть на «C-tab», но я могу использовать вектор «C-tab», «[C-tab]» с 'global-set-keybinding', чтобы связать мой C -TAB. Является ли 'C-tab' просто символом внутри вектора, а не значением? (Не знаю, что этот вопрос даже означает что-то. –

+0

@ShannonSeverance Да, это символ - как я сказал во втором предложении. Я добавлю еще несколько примеров, чтобы сделать его более ясным. –

+0

@Shannon: Кроме того, '[C -tab] 'является синтаксической стенографией' (вектор 'C-tab) '(аналогично' '(C-tab)' for '(list' C-tab)'). – Gilles

4

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

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

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

+0

1) Я пытаюсь понять, что такое '[C-tab]', у меня уже есть способ привязки к 'C-Tab' с' (ключ-ключ [C-tab] binding-test) ' –

+0

Вы правы, что C-Tab не всегда доступен. Например, при входе в Linux-сервер с использованием эмуляции VT-100. Это не. Но локально в окне Windows XP он доступен. –

+1

Я что-то узнал, я попробовал '(глобальный набор-ключ (kbd« C-tab ») 'key-binding-test)' ранее, который не работал. 'TAB' чувствителен к регистру при обработке' kdb'. –

Смежные вопросы