Hacer que una variable local de búfer se vuelva global nuevamente

12

Estaba experimentando con variables locales y establecí:

(defvar-local foo nil "Buffer local foo")

Luego rediseñé mi programa para usar una variable global en su lugar usando:

(defvar foo nil "Not buffer local foo")

pero la variable todavía es local de búfer e incluso (kill-local-variable 'foo)no la eliminó.

Básicamente, ¿cómo puedo "deshacer" make-local-variable?

Maciej Goszczycki
fuente
1
Solo FWI, defvar-usos locales make-variable-buffer-localno make-local-variable.
Malabarba

Respuestas:

12

El comentario de @Malabarba explica su problema.

kill-local-variable no deshacerse de la unión variable local. Pero como 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 para usar uninternen el símbolo. ( makunboundno ayuda)

Si usa unintern, entonces está bien. Pero tenga en cuenta que la desconexión elimina el símbolo por completo, por lo que si utilizó 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 uninterny luego reasignar la variable al valor que desee: será un valor global.

Dibujó
fuente