Buat variabel buffer-lokal menjadi global kembali

12

Saya sedang bereksperimen dengan variabel lokal dan mengatur:

(defvar-local foo nil "Buffer local foo")

Saya kemudian mendesain ulang program saya untuk menggunakan variabel global sebagai gantinya menggunakan:

(defvar foo nil "Not buffer local foo")

tetapi variabel masih buffer lokal dan bahkan (kill-local-variable 'foo)tidak membunuhnya.

Pada dasarnya, bagaimana saya bisa "membatalkan" make-local-variable?

Maciej Goszczycki
sumber
1
Hanya FWI, penggunaan defvar-local make-variable-buffer-localtidak make-local-variable.
Malabarba

Jawaban:

12

Komentar dari @Malabarba menjelaskan masalah Anda.

kill-local-variable tidak menghilangkan pengikatan variabel lokal. Tetapi karena dalam kasus Anda, variabel secara otomatis lokal di buffer apa pun, ketika Anda menetapkan ulang suatu nilai, nilai itu adalah lokal.

AFAIK, tidak ada cara untuk melawan make-variable-buffer-local, kecuali untuk digunakan uninternpada simbol. ( makunboundtidak membantu.)

Jika Anda menggunakan unintern maka Anda OK. Tetapi perlu diingat bahwa penghapusan menghapus simbol sama sekali, jadi jika Anda menggunakan simbol untuk sesuatu yang lain, selain variabel, maka mungkin ada konsekuensi negatif.

Jadi satu-satunya jawaban yang saya miliki adalah menggunakan uninterndan kemudian menugaskan kembali variabel nilai apa pun yang Anda inginkan - itu akan menjadi nilai global.

Drew
sumber