2012-05-04 24 views
13

Quiero ciertas teclas y combinaciones de teclas para comportarme como otras teclas o combinaciones de teclas en Emacs. Por ejemplo, quiero F5 comportarse como un sustituto de C-c para cada combinación posible la participación de ella, o C-S- como C-. ¿Es posible hacer eso sin volver a vincular manualmente todas esas combinaciones de teclas?Hacer que una tecla se comporte como otra tecla

Respuesta

8

Las claves a las que se refiere se conocen como "claves de prefijo". Una tecla de prefijo tiene su propio mapa de teclas, por lo que para que otra tecla se comporte igual, debe asignarla al mismo mapa de teclas. Para el control-c, se utiliza el mode-specific-map: Control

(global-set-key (kbd "<f5>") mode-specific-map) 

por sí solo no es una tecla prefijo, o en realidad una clave en absoluto, ya que no envía una pulsación de tecla a Emacs [1] hasta que presionas otra tecla. No estoy seguro de cómo reasignar C-S a C en Emacs. Podrías hacerlo en todo el sistema con xmodmap, pero probablemente no sea lo que quieres.

[1] la tecla de control (y el cambio, alt) hacen enviar una pulsación de tecla para el sistema operativo, pero Emacs no 'ver' esto a menos que haya otra tecla pulsada al mismo tiempo

+1

+1 pero ... * "El control por sí solo no es una tecla de prefijo, o realmente una tecla en absoluto, ya que no envía una pulsación de tecla" * ... El control definitivamente envía una pulsación de tecla por sí mismo . Puede usar, por ejemplo, * xev * en Linux para ver eso. Envía una pulsación de tecla cuando la presionas y una tecla de liberación cuando la sueltas. Una salida * xev * para CTRL en mi sistema da: * KeyPress evento eventKeyPress ... estado 0x14, código clave 37 (keysym 0xffe3, Control_L) ... * etc. Discuto un poco que usted escribió que el control no es "realmente un clave en absoluto ". CTRL y CAPS-LOCK de mi teclado vueltos a mapear para que actúen como CTRL se ofenden;) – TacticalCoder

+1

@TacticalCoder: Punto justo, en lo que respecta a X. Pero no creo que la pulsación de tecla registrada por X sea visible para Emacs por sí misma. No hay forma de que Emacs detecte o responda a una tecla modificadora si no está modificando otra tecla. Entonces, desde la perspectiva de Emacs, CTRL por sí solo no es una clave hasta que se combina con otra clave. – Tyler

5

prefiero

(define-key key-translation-map [f5] (kbd "\C-c")) 

Aquí hay un good resource.

Para resumir el enlace anterior: La desventaja de global-set-key es que, cuando se define una combinación de teclas para ingresar un símbolo, no funciona en isearch.

key-translation-map también tiene un problema. Imagine que definió un símbolo | para ejecutar un comando y C- | para ingresar el símbolo |, presionando C- | ejecutará el comando.

Cuestiones relacionadas