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 ):
-
Mx: global-set-key
- Escriba la combinación de teclas que desee
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)