30.7 Удаление фреймов

Живой фрейм — это фрейм, который не был удалён. Когда фрейм удаляется, он убирается с экрана терминала, хотя может продолжать существовать как объект Lisp, пока на него остаются ссылки.

Команда: delete-frame &optional frame force

Эта функция удаляет фрейм frame. Аргумент frame должен указывать на живой фрейм (см. ниже) и по умолчанию равен выбранному фрейму.

Сначала она удаляет все дочерние фреймы фрейма frame (см. Дочерние фреймы) и все фреймы, чей параметр фрейма delete-before (см. Параметры взаимодействия фреймов) указывает на frame. Все такие удаления выполняются рекурсивно; таким образом, этот шаг гарантирует, что не останется других фреймов, для которых frame является предком. Затем, если frame не является всплывающей подсказкой, эта функция запускает хук delete-frame-functions (каждая функция получает один аргумент — frame) перед фактическим уничтожением фрейма. После фактического уничтожения фрейма и удаления его из списка фреймов delete-frame запускает after-delete-frame-functions.

Обратите внимание, что фрейм не может быть удалён, пока его минибуфер служит суррогатным минибуфером для другого фрейма (см. Минибуферы и фреймы). Обычно вы не можете удалить фрейм, если все остальные фреймы невидимы, но если force не равен nil, то вам разрешено это сделать.

Функция: frame-live-p frame

Эта функция возвращает не nil, если фрейм frame не был удалён. Возможные возвращаемые значения, отличные от nil, аналогичны значениям framep. См. Фреймы.

Некоторые оконные менеджеры предоставляют команду для удаления окна. Они работают, отправляя специальное сообщение программе, управляющей окном. Когда Emacs получает одну из таких команд, он генерирует событие delete-frame, обычное определение которого является командой, вызывающей функцию delete-frame. См. Разные системные события.

Команда: delete-other-frames &optional frame iconify

Эта команда удаляет все фреймы на терминале frame, кроме frame. Если frame использует минибуфер другого фрейма, этот фрейм с минибуфером остаётся нетронутым. Аргумент frame должен указывать на живой фрейм и по умолчанию равен выбранному фрейму. Внутренне эта команда работает путём вызова delete-frame с force, равным nil, для всех фреймов, которые должны быть удалены.

Эта функция не удаляет дочерние фреймы frame (см. Дочерние фреймы). Если frame является дочерним фреймом, она удаляет только его собратьев.

С префиксным аргументом iconify фреймы сворачиваются (иконифицируются) вместо удаления.