Как мне очистить переменные, когда буфер с моим основным режимом похоронен или уничтожен? - PullRequest
0 голосов
/ 04 июня 2018

Я пишу основной режим для буфера, который создается в ответ на интерактивную команду.Другими словами, в этом основном режиме будет только 1 буфер.Что-то вроде буфера messages-mode-buffer или Magit's Status.

Проблема в том, что даже после того, как буфер с моим основным режимом убит, переменные, которые я определил с помощью defvar, сохраняют свои последние значения.

Это нормально?Глядя на некоторые другие режимы случайным образом, я также не вижу, чтобы они собирали переменные, которые они использовали, но они больше не нужны.

Если я должен очистить их, как я могу это сделать?

1 Ответ

0 голосов
/ 04 июня 2018

Если переменная имеет одинаковое значение в каждом буфере, то она, очевидно, должна выжить, когда буфер уничтожен.Он может применяться к другим существующим буферам, и даже если все буферы в этом режиме уничтожены, он будет применяться к новым буферам в этом режиме.Таким образом, этот вопрос относится только к переменным, которые имеют локальное значение, которое может отличаться в каждом буфере.

Для того, чтобы иметь локальное значение в буфере, переменная должна быть явно сделанной локальной ,Обычно это делается либо путем вызова make-local-variable, если переменная должна быть локальной в данном буфере, либо путем вызова make-variable-buffer-local сразу после defvar, чтобы объявить, что все присваивания этой переменной (кроме set-default и т. П.) будет локальным.

Если буфер похоронен, это никак не повлияет на его переменные.Хоронить буфер - это почти видимость окна, в котором он отображается.

Если буфер уничтожен, все его значения локальной переменной перестают существовать.

Это оставляет только тот случай, когда существующийбуфер меняет свой основной режим.Все функции основного режима должны вызывать kill-all-local-variables.Это удаляет любое значение локальной переменной, которое имело значение для предыдущего режима.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...