Me he encontrado con algunas situaciones en las que sería muy conveniente que el mapa de teclas de un modo principal actúe como un mapa de teclas alternativo para otro modo principal. Por ejemplo:
- Escribo mucho LaTeX en algunos de mis documentos de organización, por lo que sería genial tener
latex-mode
comandos fácilmente disponibles durante la ediciónorg-mode
. - Frecuenta una sala de IRC con soporte de Markdown, por lo que también sería bueno tener
markdown-mode
teclas agregadaserc-mode
.
En ambos casos, este mapa de teclas adicional debería actuar como una reserva (por eso no puedo usar un modo menor para esto). No quiero que los comandos de látex anulen ninguna org-mode
tecla. Lo que quiero es:
si una clave está definida en latex-mode-map
Y no está definida,
org-mode-map
entonces use el latex-mode-map
enlace .
P: ¿Cómo puedo configurar un mapa de teclas como un mapa de teclas alternativo para un modo mayor?
O
P: ¿Cómo puedo copiar claves de un mapa de modo principal a otro, sin anular nada?
Solo para aclarar. Sé que podría definir estas claves una por una, pero sería infinitamente más conveniente tener una solución automatizada.
fuente
make-composed-keymap
.Respuestas:
Esto resultó ser más simple de lo esperado. Como se sugiere en los comentarios aquí y sobre la pregunta:
Esto creará un mapa de teclas que es una copia
erc-mode-map
pero que también hereda demarkdown-mode-map
. Por lo tanto, todas lasmarkdown
teclas se sombrearán cada vez que choquen con laserc
teclas.Si no desea algunas de las claves del mapa de teclas retroceso a eclipsar a la kemap principal, justo desactivarlas en la principal.
fuente
define-key
el valor de retorno demake-composed-keymap
puede tener efectos secundarios inesperados en los mapas de teclas originales, y sospecho que lo mismo podría aplicarse a esteappended
mapa manual . Si desea utilizardefine-key
, parece más seguro crear un nuevo mapa de teclas cuyo mapa de teclas principal sea un mapa de teclas compuesto.(define-key erc-mode-map "\C-c\C-s" nil)
, lamarkdown-mode
clave correspondiente seguirá estando disponible incluso en los buffers erc.make-composed-keymap
documentación dice que "un enlace nulo en MAPS anula cualquier enlace correspondiente en PADRE, pero no anula los enlaces correspondientes en otros mapas de teclas de MAPS". Comomarkdown-mode-map
es PADRE en su ejemplo, ¿esperaría que esenil
enlace inhiba el enlace de rebajas?(make-composed-keymap (list erc-mode-map markdown-mode-map))
tendría el efecto que usted describió.cl-copy-list
Realmente no hará lo que quieres. Si quería copiar el mapa de teclas, entonces debería haberlo usadocopy-keymap
.Como mencionó @Malabarba, puede usarlo
make-composed-keymap
para eso. Pero si realmente desea que el nuevo mapa de teclas herede de ambos mapas de teclas, por lo que modificar el nuevo mapa de teclas no afecta a ninguno de los otros dos mapas de teclas, debe hacerlo en dos pasos:Esto se debe a
define-key
que a veces se pueden modificar los mapas pasados como primer argumentomake-composed-keymap
pero no aquellos pasados como segundo. Supongo que deberíasM-x report-emacs-bug
y solicitar quemake-composed-keymap
aceptes una lista de mapas de teclas como segundo argumento, para que puedas hacerfuente