emacs key-bindings

Emacs global-set-key para C-TAB



key-bindings (6)

Estoy intentando establecer un enlace de clave a Ctrl + TAB en Emacs. Usé la siguiente llamada:

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

Sin embargo, cada vez que lo uso, obtengo un

<C-tab> is undefined

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

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


A diferencia de lo que otros han sugerido, es una buena idea usar kbd (o read-kbd-macro que es básicamente lo mismo) en caso de que alguna vez quiera usar 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 utilizado por read-kbd-macro está documentado en el docstring de edmacro-mode :

  • Las palabras especiales RET, SPC, TAB, DEL, LFD, ESC y NUL representan caracteres de control especiales. Las palabras deben escribirse en mayúsculas.

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

Esto está escrito de alguna manera lamentablemente; 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 funciona en un terminal de texto) como <tab> con un modificador de Control, que puede representar como C-<tab> o <C-tab> .


En el manual de referencia de gnu emacs lisp, sección 21.1 "Secuencias de teclas", hacen referencia usando / t para representar la tecla de tabulación.

Utilizando la sintaxis que se muestra en el manual de referencia de Lisp, usaría el siguiente comando:

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


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

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

¿Tal vez la sintaxis más clara marcará la diferencia?

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


Es porque estás usando read-kbd-macro incorrectamente. Cuando ves lo que está ligado a una tecla:

C-h k C-TAB

Emacs te dice:

<C-tab> is undefined.

Necesita incluir el <> 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


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

  1. Mx: global-set-key
  2. Escriba la combinación de teclas que desee
  3. Use Cx ESC ESC ( repeat-complex-command ) para ver el comando adecuado. En tu caso, obtengo:

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


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