Pregunta:
Estaba experimentando con variables locales y establecí:
(defvar-local foo nil "Buffer local foo")
Más tarde rediseñé mi programa para usar una variable global en lugar de usar:
(defvar foo nil "Not buffer local foo")
pero la variable sigue siendo un búfer local e incluso (kill-local-variable 'foo)
no la mató.
Básicamente, ¿cómo puedo "deshacer" make-local-variable
?
Respuesta:
El comentario de @Malabarba explica tu problema.
kill-local-variable
se deshace de la unión variable local. Pero dado que en su caso la variable es automáticamente local en cualquier búfer, cuando le reasigna un valor, ese valor es local.
AFAIK, no hay forma de contrarrestar make-variable-buffer-local
, excepto usar unintern
en el símbolo. ( makunbound
no ayuda).
Si usa unintern, está bien. Pero tenga en cuenta que el desinterés elimina el símbolo por completo, por lo que si usó el símbolo para otra cosa, además de una variable, entonces podría haber consecuencias negativas.
Entonces, la única respuesta que tengo es usar unintern
y luego reasignar a la variable el valor que desee; será un valor global.