¿Cómo puedo reemplazar globalmente Cc con otra combinación de teclas?

7

La combinación de teclas C-cno es conveniente para escribir la distribución del teclado que uso, y estoy tratando de cambiarla globalmente. El objetivo es reemplazar cada aparición de C-ccon otro enlace <apps> d, de modo que enviar un mensaje en Gnus sería <apps> d <apps> d, compilar en auxtex sería lo mismo, y la clave de prefijo del usuario C-ctambién sería siempre <apps> d. La tecla <apps>está <f19>en mi teclado.

Al leer el manual, parece que necesito usarlo key-translation map. Funciona muy bien con la traducción de <f19>a<apps>

(define-key key-translation-map (kbd "<f19>") (kbd "<apps>"))
(global-set-key (kbd "<apps> s") 'save-buffer)

Desafortunadamente, no funciona cuando quiero hacer esto C-c.

(define-key key-translation-map (kbd "<apps> d") (kbd "C-c"))

Cuando trato de usarlo, obtengo

<apps> d is undefined

y si lo busco ( C-h k), veo

<apps> d (translated from <f19> d) is undefined

¿Hay alguna manera de hacer que esto funcione?

brab
fuente
Una suposición, un mapa similar ( input-decode-map) tiene esto en su documentación: "Los eventos que provienen de enlaces en 'input-decode-map' no se miran en 'input-decode-map'". Lo que tiene sentido, si lo piensas: esta sería una forma de evitar traducciones infinitas.
wvxvw

Respuestas:

2

El problema en su intento es que appsproviene de una traducción vía key-translation-map, y esta salida no se busca de forma key-translation-maprecursiva. Si omite por appscompleto y trabaja f19directamente, funciona.

(global-set-key (kbd "<f19> s") 'save-buffer)
(define-key key-translation-map (kbd "<f19> d") (kbd "C-c"))

Si desea utilizar el appsalias, puede aprovechar el hecho de que hay dos mapas de traducción similares: input-decode-mapy key-translation-map. Utilícelo input-decode-mappara declarar teclas de función virtuales correspondientes a secuencias de teclas enviadas por su teclado, por ejemplo, la traducción de f19a apps. Se usa key-translation-mappara hacer una traducción interna en Emacs, por ejemplo, de apps da C-c.

(define-key input-decode-map (kbd "<f19>") (kbd "<apps>"))
(global-set-key (kbd "<apps> s") 'save-buffer)
(define-key key-translation-map (kbd "<apps> d") (kbd "C-c"))
Gilles 'SO- deja de ser malvado'
fuente
Gracias, esto funciona muy bien. Intenté usar local-function-key-mapy también funciona. ¿Hay alguna razón para usar uno sobre el otro?
brab
La diferencia con local-function-key-mapes que local-function-key-mapse puede anular con un enlace global o local para apps d. Pensar en ello podría ser una característica más que un error.
Gilles 'SO- deja de ser malvado'