elisp – Hacer que una variable local del búfer se vuelva global nuevamente

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.

Leave a Comment

Your email address will not be published. Required fields are marked *

web tasarım