Уничтожение буферов
Уничтожение буфера делает его имя неизвестным для Emacs и высвобождает занимаемое им пространство памяти для других задач.
Объект буфера для уничтоженного буфера продолжает существовать, пока на него ссылаются, но он помечается специальным образом, так что его нельзя сделать текущим или отобразить. Уничтоженные буферы сохраняют свою идентичность; если вы уничтожите два разных буфера, они останутся разными согласно eq, хотя оба и мертвы.
Если вы уничтожаете буфер, который является текущим или отображается в окне, Emacs автоматически выбирает или отображает другой буфер вместо него. Это означает, что уничтожение буфера может изменить текущий буфер. Поэтому, когда вы уничтожаете буфер, вы должны принять меры предосторожности, связанные с изменением текущего буфера (если только вам не известно, что уничтожаемый буфер не является текущим). См. Текущий буфер.
Если вы уничтожаете буфер, который является базовым буфером одного или нескольких косвенных буферов (см. Косвенные буферы), косвенные буферы также автоматически уничтожаются.
Буфер считается nil, если и только если он уничтожен. Буфер, который не был уничтожен, называется активным буфером. Чтобы проверить, является ли буфер активным или уничтоженным, используйте функцию buffer-live-p (см. ниже).
- Команда: kill-buffer &optional buffer-or-name
-
Эта функция уничтожает буфер buffer-or-name, освобождая всю его память для других задач или возвращая её операционной системе. Если buffer-or-name является
nilили опущена, она уничтожает текущий буфер.Любые процессы, у которых этот буфер является
process-buffer, получают сигналSIGHUP(отключение), который обычно приводит к их завершению. См. Сигналы для процессов.Если буфер посещает файл и содержит несохраненные изменения,
kill-bufferпопросит пользователя подтвердить перед уничтожением буфера. Это происходит даже если функция не вызвана интерактивно. Чтобы предотвратить запрос на подтверждение, очистите флаг изменения перед вызовомkill-buffer. См. Изменение буфера.Эта функция вызывает
replace-buffer-in-windowsдля очистки всех окон, в которых в данный момент отображается уничтожаемый буфер.Уничтожение уже уничтоженного буфера не оказывает никакого эффекта.
Эта функция возвращает
t, если она действительно уничтожила буфер. Она возвращаетnil, если пользователь отказался подтвердить или если buffer-or-name уже был уничтожен.(kill-buffer "foo.unchanged") ⇒ t (kill-buffer "foo.changed") ---------- Buffer: Minibuffer ---------- Buffer foo.changed modified; kill anyway? (yes or no) yes ---------- Buffer: Minibuffer ---------- ⇒ t
- Переменная: kill-buffer-query-functions
-
Перед подтверждением несохраненных изменений
kill-bufferвызывает функции в спискеkill-buffer-query-functions, в порядке их появления, без аргументов. Уничтожаемый буфер является текущим буфером при их вызове. Цель этой функции заключается в том, чтобы эти функции запросили подтверждение у пользователя. Если любая из них возвращаетnil,kill-bufferсохраняет жизнь буфера.Этот хук не выполняется для внутренних или временных буферов, созданных
get-buffer-createилиgenerate-new-bufferс аргументом inhibit-buffer-hooks, отличным отnil.
- Переменная: kill-buffer-hook
-
Это обычный хук, выполняемый
kill-bufferпосле того, как заданы все вопросы, которые необходимо задать, непосредственно перед фактическим уничтожением буфера. Буфер, который будет уничтожен, является текущим при запуске функций хука. См. Хук. Эта переменная является постоянной локальной переменной, поэтому её локальное привязывание не очищается при изменении основных режимов.Этот хук не выполняется для внутренних или временных буферов, созданных
get-buffer-createилиgenerate-new-bufferс аргументом inhibit-buffer-hooks, отличным отnil.
- Вариант пользователя: buffer-offer-save
Эта переменная, если она не
nilв определённом буфере, сообщаетsave-buffers-kill-emacsпредложить сохранить этот буфер, точно так же, как это предлагается для посещаемых файлами буферов. Еслиsave-some-buffersвызывается со вторым необязательным аргументом, установленным вt, то это также предложит сохранить буфер. Наконец, если эта переменная установлена в символalways, обаsave-buffers-kill-emacsиsave-some-buffersвсегда предложат сохранить. См. Определение save-some-buffers. Переменнаяbuffer-offer-saveавтоматически становится локальной для буфера при настройке по любой причине. См. Переменные, локальные для буфера.
- Переменная: buffer-save-without-query
Эта переменная, если она не
nilв определённом буфере, сообщаетsave-buffers-kill-emacsиsave-some-buffersсохранить этот буфер (если он изменён) без запроса у пользователя. Переменная автоматически становится локальной для буфера при настройке по любой причине.
- Функция: buffer-live-p object
Эта функция возвращает
t, если object является активным буфером (буфером, который не был уничтожен),nilв противном случае.
Copyright © 1990-1996, 1998-2022 Free Software Foundation, Inc.
Licensed under the GNU GPL license.
https://www.gnu.org/software/emacs/manual/html_node/elisp/Killing-Buffers.html