Eu estava experimentando variáveis locais e defini-lo:
(defvar-local foo nil "Buffer local foo")
Mais tarde, redesenhei meu programa para usar uma variável global em vez disso:
(defvar foo nil "Not buffer local foo")
mas a variável ainda é local de buffer e até (kill-local-variable 'foo)
não a matou.
Basicamente, como posso "desfazer" make-local-variable
?
elisp
local-variables
buffer-local
Maciej Goszczycki
fonte
fonte
make-variable-buffer-local
não usamake-local-variable
.Respostas:
O comentário de @Malabarba explica seu problema.
kill-local-variable
não se livrar da variável local de ligação. Mas como no seu caso a variável é automaticamente local em qualquer buffer, quando você atribui novamente um valor, esse valor é local.AFAIK, não há como combater
make-variable-buffer-local
, exceto para usarunintern
no símbolo. (makunbound
não ajuda.)Se você usa o unintern, está bem. Mas lembre-se de que o desinteresse interno remove completamente o símbolo; portanto, se você o usou para outra coisa, além de uma variável, pode haver consequências negativas.
Portanto, a única resposta que tenho é usar
unintern
e reatribuir à variável o valor que você quiser - será um valor global.fonte