28.10 Уничтожение буферов

Уничтожение буфера делает его имя неизвестным для Emacs и освобождает занимаемую им память для другого использования.

Объект буфера для уничтоженного буфера продолжает существовать, пока на него ссылается что-либо, но он специально помечен, так что вы не можете сделать его текущим или отобразить его. Однако уничтоженные буферы сохраняют свою индивидуальность; если вы уничтожите два разных буфера, они останутся различными согласно eq, хотя оба мертвы.

Если вы уничтожаете буфер, который является текущим или отображается в окне, Emacs автоматически выбирает или отображает вместо него некоторый другой буфер. Это означает, что уничтожение буфера может изменить текущий буфер. Поэтому, когда вы уничтожаете буфер, вы также должны предпринять меры предосторожности, связанные с изменением текущего буфера (если вы случайно не знаете, что уничтожаемый буфер не является текущим). См. Текущий буфер.

Если вы уничтожаете буфер, который является базовым для одного или нескольких косвенных буферов (см. Косвенные буферы), косвенные буферы также уничтожаются автоматически.

buffer-name буфера равно 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")

---------- Буфер: Minibuffer ----------
Буфер foo.changed изменён; уничтожить всё равно? (yes or no) yes
---------- Буфер: Minibuffer ----------

     ⇒ t
Переменная: kill-buffer-query-functions

Перед подтверждением несохранённых изменений kill-buffer вызывает функции из списка kill-buffer-query-functions в порядке их появления без аргументов. Уничтожаемый буфер является текущим во время их вызова. Смысл этой возможности в том, что эти функции запрашивают подтверждение у пользователя. Если любая из них возвращает nil, kill-buffer щадит буфер.

Этот хук не выполняется для внутренних или временных буферов, созданных get-buffer-create или generate-new-buffer с не-nil аргументом inhibit-buffer-hooks.

Переменная: kill-buffer-hook

Это обычный хук, выполняемый kill-buffer после того, как заданы все вопросы, которые он собирается задать, непосредственно перед фактическим уничтожением буфера. Уничтожаемый буфер является текущим, когда выполняются функции хука. См. Хуки. Эта переменная является постоянной локальной, поэтому её локальная привязка не очищается при смене основных режимов.

Этот хук не выполняется для внутренних или временных буферов, созданных get-buffer-create или generate-new-buffer с не-nil аргументом inhibit-buffer-hooks.

Пользовательская опция: 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 в противном случае.