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 b
llave 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
defvar
no evaluará su valor nuevamente después deC-M-x
:) Necesitaríasdefparameter
o por separadosetf
.define-minor-mode
macro: llamandodefvar
para 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-buffer
oeval-region
luego el valor existente no cambia.C-M-x
en cuenta que en eldefvar
formulario solo se actualiza la variable mode-map en sí. También debe hacerloC-M-x
en eldefine-minor-mode
formulario para 'instalar' el mapa modificado en el modo menor. Traté de entender por qué expandiendo las macros, pero está más allá de mí.