Spec-Zone.ru › Elisp

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

Уничтожение буфера делает его имя неизвестным для 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API