2009-05-27 16 views
32

Estoy tratando de establecer un enlace de teclas a Ctrl + TAB en Emacs. He utilizado la siguiente llamada:Emacs global-set-key para C-TAB

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

Sin embargo, cada vez que lo uso, me sale un mensaje de error

<C-tab> is undefined 

. Intentar establecer el enlace a "C-tab" da como resultado un mensaje de error.

¿Cómo puedo establecer mi enlace a C-TAB?

Respuesta

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

gracias la sintaxis [] fue donde me salió mal –

3

En lugar de usar read-kbd-macro, intente utilizar la sintaxis más simple?

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

¿Quizás la sintaxis más clara marcará la diferencia?

Más sobre read-kbd-macro y global-set-key.

+1

La gran ventaja de usar '(KBD)' es que se puede utilizar la misma sintaxis que los rendimientos de Emacs cuando llamas a 'describe-key', lo que hace que sea completamente trivial de tratar (como lo demostró muy bien la respuesta de Trey). – phils

11

Es porque está utilizando read-kbd-macro incorrectamente. Cuando vea lo que está ligado a una tecla:

C-h k C-TAB 

Emacs le dice:

<C-tab> is undefined. 

es necesario incluir la <> en su invocación de read-kbd-macro.

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

Y, no sé cómo generar <C-TAB>, pero no es lo mismo que <C-tab>.

(equal (kbd "<C-TAB>") (kbd "<C-tab>")) 
-> 
nil 
45

A diferencia de otros han sugerido, es una buena idea usar kbd (o read-kbd-macro que es básicamente la misma cosa) en caso de que desee utilizar los mismos archivos de configuración en otras versiones de Emacs; kbd funciona en varias versiones de Emacs y XEmacs, donde la representación interna de las secuencias de teclas es diferente.

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

El formato de entrada utilizada por read-kbd-macro se documenta en la cadena de documentación de edmacro-mode:

  • Las palabras especiales RET, SPC, TAB, Del, LFD, ESC y NUL representan especial controlar personajes Las palabras deben escribirse en mayúsculas.

  • Una palabra en soportes de ángulo, por ejemplo, < retorno>, < abajo>, o < f1>, representa una tecla de función. (Tenga en cuenta que en la configuración estándar, la tecla de función < return> y la tecla de control RET son sinónimos.) Puede usar corchetes angulares en las palabras RET, SPC, etc., pero no son necesarios allí.

Esto se escribe algo por desgracia; la TAB a la que se hace referencia en el primer punto es el carácter ASCII para TAB, y agregar el modificador Control hace algo sin sentido. Cuando presiona Control-Tab, Emacs lo ve (a través de su sistema de ventanas, no funcionará en un terminal de texto) como <tab> con un modificador de Control, que puede representar como C-<tab> o <C-tab>.

+0

¿Hay una solución para '' en emacs en un terminal de texto? Pregunté en serverfault: http://serverfault.com/questions/81688/problem-with-ctrl-tab-keybinding-in-emacs-in-gnome-terminal – Tom

+0

¿Qué significa kbd? gracias – why

+0

kbd es una macro documentada en http://www.gnu.org/software/emacs/manual/html_node/elisp/Key-Sequences.html y se usa para convertir el formato de enlace de clave utilizado en la documentación de Emacs a valores entendidos por funciones como global-set-key. –

6

Tenga en cuenta que también puede llamar al global-set-key de forma interactiva. A continuación, puede ver el comando correcto vinculante con repeat-complex-command (véase también KeybindingGuide):

  1. M-x: global-set-key
  2. introduzca la combinación de teclas que desee
  3. Uso C-x ESC ESC (repeat-complex-command) para ver el comando apropiate. En su caso me sale:

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

en las GNU Emacs Lisp manual de referencia, sección 21.1 "Secuencias de la tecla", que hacen referencia usando \ t para representar la tecla de tabulación.

El uso de la sintaxis se muestra en el manual de referencia Lisp, utilizaría el siguiente comando:

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