Tornar uma variável local de buffer se tornar global novamente

12

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?

Maciej Goszczycki
fonte
1
Apenas FWI, defvar-local make-variable-buffer-localnão usa make-local-variable.
Malabarba 10/10

Respostas:

12

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 usar uninternno símbolo. ( makunboundnã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 uninterne reatribuir à variável o valor que você quiser - será um valor global.

Desenhou
fonte