Machen Sie eine pufferlokale Variable wieder global

12

Ich habe mit lokalen Variablen experimentiert und Folgendes festgelegt:

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

Ich habe mein Programm später so umgestaltet, dass stattdessen eine globale Variable verwendet wird:

(defvar foo nil "Not buffer local foo")

Aber die Variable ist immer noch pufferlokal und hat sie sogar (kill-local-variable 'foo)nicht getötet.

Wie kann ich grundsätzlich "rückgängig machen" make-local-variable?

Maciej Goszczycki
quelle
1
Nur FWI, defvar-local make-variable-buffer-localnicht make-local-variable.
Malabarba

Antworten:

12

Der Kommentar von @Malabarba erklärt Ihr Problem.

kill-local-variable entfernt die lokale Variablenbindung. Da in Ihrem Fall die Variable in jedem Puffer automatisch lokal ist, ist dieser Wert lokal, wenn Sie ihm einen Wert zuweisen.

AFAIK, es gibt keine Möglichkeit zu kontern make-variable-buffer-local, außer uninterndas Symbol zu verwenden. ( makunboundhilft nicht.)

Wenn Sie unintern verwenden, sind Sie in Ordnung. Beachten Sie jedoch, dass durch das Nichteinschalten das Symbol vollständig entfernt wird. Wenn Sie das Symbol also für etwas anderes als eine Variable verwenden, kann dies negative Konsequenzen haben.

Die einzige Antwort, die ich habe, ist, uninterndie Variable zu verwenden und sie dann neu zuzuweisen, egal welchen Wert Sie möchten - es wird ein globaler Wert sein.

Drew
quelle