minor-mode – ¿Cómo se actualiza una definición de modo menor a medida que la desarrolla?

Pregunta:

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 tecla b , e inmediatamente me di cuenta de que debería haber usado "b" lugar de [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 búsqueda inútil a través de todas las diversas formas de vincular claves (es decir, (kbd …), […], etc.). Finalmente me di cuenta de que simplemente reevaluar la forma (define-minor-mode ...) no cambiaba nada, estaba atascado con el mapa de teclas original roto. Luego intenté cambiar el (define-key borked-mode-map ...) directamente a través de (define-key borked-mode-map ...) y todavía no pude cargar el (define-key borked-mode-map ...) corregido. Finalmente reinicié Emacs y mi modo menor se cargó correctamente.

Mi pregunta es: ¿cómo se actualiza una definición de modo menor a medida que la desarrolla? ¿Hay alguna forma de eliminar una definición rota, o tiene que reiniciar emacs para borrar los bits rotos?

Respuesta:

La primera vez que evalúa su define-minor-mode , define una variable borked-mode-map con las borked-mode-map teclas que especificó. Una vez que se ha definido ese símbolo, sin embargo, reevaluar su modo define-minor-mode no lo cambiará.

Puede eliminar los diversos borked-mode-xxx usando unintern y luego reevaluar su código. Tratar:

(unintern 'borked-mode-map)

Es posible que le interese expandir la macro define-minor-mode para ver qué está haciendo realmente. Ponga el punto al final y llame a Mx pp-macroexpand-last-sexp . Esto abrirá un nuevo búfer que muestra la macro expandida. Allí verá las llamadas defvar utilizadas para configurar sus variables de modo. Si lee la ayuda para defvar , verá que el valor inicial solo se usa si el símbolo que se está definiendo es nulo; una vez que existe, las defvar llamadas a defvar no cambiarán su valor.

Leave a Comment

Your email address will not be published.

Scroll to Top

istanbul avukat

-

web tasarım