A veces, mis combinaciones de teclas globales son anuladas por un modo principal. Un ejemplo sencillo es la siguiente configuración en mi archivo de inicio
(global-set-key (kbd "C-j") 'newline-and-indent)
Pero molestamente, esta combinación de teclas está oculta por el modo principal "Interacción Lisp", que es el modo predeterminado del búfer de memoria virtual.
Cuando me encuentro en una situación en la que un modo mayor (o modo menor) está ocultando mi combinación de teclas global, ¿cómo puedo recuperarlo?
Nota: Mi pregunta no es "¿Cómo puedo unen C-j
a newline-and-indent
'? Modo' en" Lisp Interaction Estoy interesado en una respuesta mucho más general sobre cómo lidiar con los mapas de teclas que chocan o las combinaciones de teclas del usuario que se ocultan en algún modo mayor / menor.
key-bindings
major-mode
keymap
minor-mode
nispio
fuente
fuente
Respuestas:
También hay un enfoque de "acceso directo" para la misma solución si no desea definir su propio modo menor (del que hablo en mi primera respuesta).
Puede instalar el
use-package
paquete disponible de melpa y hacer uso debind-key*
obind-keys*
macro que es parte delbind-key
paquete que se envía conuse-package
.De la documentación de
bind-key.el
:fuente
emulation-mode-map-alists
para imponer la precedencia).(bind-key* "C-M-&" 'override-global-mode)
, a su inicio, y generalmente puede eliminar los enlaces rápidamente si lo necesita. Dadooverride-global-mode
que no es un modo menor "global", aún deberá desactivarlo por búfer. Entonces, si te encuentras desactivando con frecuencia las teclas de anulación global, entonces esta solución no es conveniente.Puede definir su propio modo menor y su mapa clave y hacer que anule todos los demás modos (menor + mayor). Es exactamente por eso que elegí escribir mi propio modo menor.
Pasos para que sus combinaciones de teclas anulen todas las combinaciones:
(define-key my-mode-map (kbd "C-j") #'newline-and-indent)
Del mismo modo, sus otras combinaciones de teclas establecidas en su modo menor anularán las de otros modos.
Recomiendo leer la publicación de blog de Christopher Wellons sobre cómo escribir un modo menor. Ese blog, más la molestia de tener que establecer varias asociaciones de teclas
nil
en múltiples modos mayores y menores, me inspiró a escribir mi propio modo menor.La mejor parte del uso de este enfoque es que cuando desea verificar qué hacen las combinaciones de teclas en la configuración predeterminada de emacs, simplemente apaga su modo menor; luego lo vuelve a encender y recupera sus combinaciones de teclas personalizadas.
fuente
Para que un enlace global anule un enlace del modo principal, simplemente configure el enlace
nil
en el modo principal:No es posible que el enlace global tenga prioridad sobre todos los modos en general (de lo contrario, no tendría sentido tener modos principales), pero podría hackearlo creando su propio modo menor con sus enlaces más importantes. Entonces al menos tendría prioridad sobre la mayoría de los modos (aunque no necesariamente todos).
fuente
(define-key foo-mode (kbd "C-j") nil)
mi archivo .emacs y esperar que esto funcione?foo-mode-map
(mi ejemplo en la respuesta fue malo), pero sí, eso deshabilitará la combinación de teclas en el modo mayor, por lo que se usará la combinación de teclas global (a menos que haya un modo menor diferente que lo esté usando).foo-mode
se llame al mapa de teclas parafoo-mode-map
?Puedes usar estas macros:
EDITAR :
Verifique el ejemplo a continuación:
Si el mapa de teclas X está anulando su enlace global Y, usted escribe:
(expose-bindings X '("Y"))
Y luego la anulación se 'deshacerá'.
fuente
other map
, exponiendo así el enlace del mapa global a través deother map
. El segundo simplemente le permite aplicar el primero para una lista de enlaces.expose-bindings
primero y luego ato globalmente esas teclas a los comandos que quiero? Tal vez podría mostrar un ejemplo de lo que podría poner en mi archivo de inicio para que esto funcione.