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?


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.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.