bind-map es un paquete de Emacs que proporciona la macro bind-map
que se puede utilizar para hacer que un mapa de teclas esté disponible en diferentes "teclas líderes", incluidas las vinculadas a estados malignos. Es esencialmente una generalización de la idea de una clave líder como se usa en vim o el paquete evil-leader de Emacs, y permite un número arbitrario de “claves líderes”. Probablemente esto se explique mejor con un ejemplo.
(bind-map my-base-leader-map
:keys ( " M-m " )
:evil-keys ( " SPC " )
:evil-states (normal motion visual))
(bind-map my-elisp-map
:keys ( " M-m m " " M-RET " )
:evil-keys ( " SPC m " " , " )
:major-modes ( emacs-lisp-mode
lisp-interaction-mode))
Esto hará que my-base-leader-map
(que crea automáticamente el mapa si aún no está definido) esté disponible bajo los prefijos (o líderes) Mm
y SPC
, donde este último solo está vinculado en los estados normales, de movimiento o visuales del mal. La segunda declaración hace que my-elisp-map
esté disponible bajo las claves especificadas cuando uno de los modos principales especificados está activo. En el segundo caso, los estados malvados utilizados también son de movimiento normal y visuales porque este es el valor predeterminado como se especifica en bind-map-default-evil-states
. Es posible condicionar las vinculaciones a la carga de modos menores o a una combinación de modos mayores y menores. Dado que se utilizan los símbolos de los modos, no es necesario asegurarse de que ninguno de los paquetes del modo se cargue antes de esta declaración. Consulte la cadena de documentación de bind-map
para obtener más opciones.
Este paquete sólo hará uso de evil si se especifica una de las palabras clave relacionadas con evil. Esta declaración, por ejemplo, no utiliza el paquete malvado.
(bind-map my-elisp-map
:keys ( " M-m m " " M-RET " )
:major-modes ( emacs-lisp-mode
lisp-interaction-mode))
La idea detrás de este paquete es que desea organizar sus enlaces personales en una serie de mapas de teclas separados de los mapas de modo integrados. Simplemente puede agregar claves usando la define-key
incorporada en my-elisp-map
, por ejemplo, y una declaración como la anterior se encargará de garantizar que estos enlaces estén disponibles en los lugares correctos.
Puede utilizar la define-key
incorporada que funcionará según lo previsto. bind-key
(parte del paquete de uso) es otra opción. Para aquellos que desean una interfaz diferente, pueden usar la palabra clave :bindings
en la macro bind-map
o las dos funciones proporcionadas bind-map-set-keys
y bind-map-set-key-defaults
, que solo usan define-key
internamente, pero permite múltiples enlaces sin mucha sintaxis.
(bind-map my-base-leader-map
:keys ( " M-m " )
:evil-keys ( " SPC " )
:evil-states (normal motion visual)
:bindings ( " c " 'compile
" C " 'check ))
(bind-map-set-keys my-base-leader-map
" c " 'compile
" C " 'check
; ; ...
)
; ; is the same as
; ; (define-key my-base-leader-map (kbd "c") 'compile)
; ; (define-key my-base-leader-map (kbd "C") 'check)
; ; ...
(bind-map-set-key-defaults my-base-leader-map
" c " 'compile
; ; ...
)
; ; is the same as
; ; (unless (lookup-key my-base-leader-map (kbd "c"))
; ; (define-key my-base-leader-map (kbd "c") 'compile))
; ; ...
La segunda función solo agrega los enlaces si no existe ningún enlace para esa clave. Probablemente solo sea útil para configuraciones compartidas, donde desea proporcionar un enlace predeterminado pero no desea que ese enlace sobrescriba uno creado por el usuario. Tenga en cuenta que las claves en ambas funciones son cadenas que se pasan a kbd
antes de vincularlas.
Si utiliza varias declaraciones bind-map
es posible que se encuentre repitiendo propiedades como :evil-keys
y :evil-states
. Puede utilizar bind-map-for-mode-inherit
para extraer automáticamente estas propiedades de un mapa principal, como se ilustra en el siguiente ejemplo. Consulte la cadena de documentación para obtener más información.
(bind-map my-leader-map
:keys ( " M-m " )
:evil-keys ( " SPC " )
:evil-states (normal motion visual))
(bind-map-for-mode-inherit my-markdown-map my-leader-map
:major-modes ( markdown-mode ))