J'expérimentais avec des variables locales et définissais:
(defvar-local foo nil "Buffer local foo")
J'ai ensuite repensé mon programme pour utiliser une variable globale à la place en utilisant:
(defvar foo nil "Not buffer local foo")
mais la variable est toujours un tampon local et (kill-local-variable 'foo)
ne l'a même pas tué.
Fondamentalement, comment puis-je "annuler" make-local-variable
?
elisp
local-variables
buffer-local
Maciej Goszczycki
la source
la source
make-variable-buffer-local
pasmake-local-variable
.Réponses:
Le commentaire de @Malabarba explique votre problème.
kill-local-variable
ne se débarrasse pas de la liaison de variable locale. Mais puisque dans votre cas, la variable est automatiquement locale dans n'importe quel tampon, lorsque vous lui réaffectez une valeur, cette valeur est locale.AFAIK, il n'y a aucun moyen de contrer
make-variable-buffer-local
, sauf pour utiliserunintern
sur le symbole. (makunbound
n'aide pas.)Si vous utilisez unintern alors vous êtes OK. Mais gardez à l'esprit que l'internalisation supprime complètement le symbole, donc si vous avez utilisé le symbole pour autre chose, en plus d'une variable, il pourrait y avoir des conséquences négatives.
Donc, la seule réponse que j'ai est d'utiliser
unintern
puis de réaffecter la variable quelle que soit la valeur que vous souhaitez - ce sera une valeur globale.la source