Pregunta:
Utilizo use-package
para administrar los paquetes instalados y bind-key
para asignar acciones a las claves personalizadas que me gustan.
Anulo la mayoría de las combinaciones de teclas predeterminadas de Emacs (por ejemplo, Cn se convierte en Mk , Cp se convierte en Mi ), pero estoy bien con otros modos que anulan mi esquema de combinación de teclas. Sin embargo, a veces quiero que mi combinación de teclas persista. Quiero que Mk signifique algo más que Gnus o Helm predeterminados.
Sin embargo, todos entran en conflicto entre sí en el inicio de Emacs, porque no puedo agregar un enlace a un mapa de teclas, si no existe (porque use-package
veces pospone la carga de un paquete). Por ejemplo, los siguientes comandos arrojan errores (por ejemplo, (void-variable helm-map)
), porque Helm y Gnus aún no están completamente cargados.
(bind-key "M-Y" 'helm-end-of-buffer helm-map)
(bind-key "M-k" 'helm-next-line helm-find-files-map)
(bind-key "M-s" 'other-window gnus-summary-mode-map)
Tengo todas mis invocaciones de use-package
en un archivo y bind-key
de enlace para combinaciones de bind-key
personalizadas en otro archivo. No quiero poner enlaces en llamadas de use-package
, porque tal vez quiero publicar mi esquema de enlace de teclado personalizado como un paquete independiente. ¿Qué pasa si quiero que alguien instale mi esquema si las combinaciones de teclas locales de Helm y Gnus también se han anulado?
¿Cómo administro las combinaciones bind-key
modo local usando bind-key
, de modo que todas las claves estén configuradas incluso si los paquetes se cargan últimamente y todas las configuraciones de claves están dentro de un archivo?
Respuesta:
Puede usar with-eval-after-load
para diferir la vinculación de teclas hasta después de que se haya cargado un cierto módulo (y así definido el mapa de teclas):
(with-eval-after-load "helm"
(bind-key "M-Y" #'helm-end-of-buffer helm-map))
Utilice Ch v helm-map
para encontrar en qué módulo está definido el Ch v helm-map
de teclas y, por lo tanto, qué poner en la cadena en la primera línea.
with-eval-after-load
se introdujo en Emacs 24.4. Si tiene una versión anterior de Emacs, necesita usar eval-after-load
lugar, y poner una comilla simple delante de la llamada de la bind-key
:
(eval-after-load "helm"
'(bind-key "M-Y" #'helm-end-of-buffer helm-map))
Si desea poner varias llamadas de bind-key
en este formulario, con with-eval-after-load
, simplemente póngalas una tras otra, pero con eval-after-load
necesita envolverlas todas en un progn
:
(eval-after-load "helm"
'(progn
(bind-key "M-Y" #'helm-end-of-buffer helm-map)
(bind-key "M-k" #'helm-next-line helm-find-files-map)))