key-bindings – ¿Cómo vincular sus claves a mapas de teclas que aún no están cargados?

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)))

Leave a Comment

Your email address will not be published.

Scroll to Top

istanbul avukat

-

web tasarım