Comencé a codificar un modo menor para proporcionar algunas combinaciones de teclas. Mi intento inicial tuvo un error tipográfico:
(define-minor-mode borked-mode
"A mode defined with a broken key binding"
nil nil
'(([b] . 'previous-line)))
Tenía la intención de usar la bllave e inmediatamente me di cuenta de que debería haberlo usado en "b"lugar de hacerlo [b]. Así que redefiní el modo menor:
(define-minor-mode borked-mode
"A mode defined with a broken key binding"
nil nil
'(("b" . 'previous-line)))
Sin embargo, esto no funcionó. Esto me puso en una persecución salvaje a través de todas las diversas formas de vincular teclas (es decir, (kbd ...), [...], etc.). Finalmente me di cuenta de que simplemente reevaluar el (define-minor-mode ...)formulario no estaba cambiando nada, me quedé atrapado con el mapa de teclas roto original. Luego intenté cambiar el mapa de teclas directamente a través de (define-key borked-mode-map ...)y todavía no pude cargar el mapa de teclas corregido. Finalmente reinicié Emacs, y mi modo menor se cargó correctamente.
Mi pregunta es: ¿cómo actualiza una definición de modo menor a medida que la desarrolla? ¿Hay alguna forma de vaciar una definición rota, o tienes que reiniciar emacs para borrar los bits rotos?
fuente

defvarno evaluará su valor nuevamente después deC-M-x:) Necesitaríasdefparametero por separadosetf.define-minor-modemacro: llamandodefvarpara definir el mapa. Evaluar ese defvar por segunda vez no tiene ningún efecto.C-M-x(eval-defun) para reevaluardefvar, la variable se actualiza. Este es un caso especial eneval-defun; si llamaeval-bufferoeval-regionluego el valor existente no cambia.C-M-xen cuenta que en eldefvarformulario solo se actualiza la variable mode-map en sí. También debe hacerloC-M-xen eldefine-minor-modeformulario para 'instalar' el mapa modificado en el modo menor. Traté de entender por qué expandiendo las macros, pero está más allá de mí.