Spec-Zone.ru › Elisp

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

Активный фрейм — это фрейм, который не был удалён. При удалении фрейма он исчезает с экрана терминала, хотя может продолжать существовать как объект 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, это разрешено. Кроме того, начальный фрейм терминала процесса Emacs, запущенного как демон (см. демон в Руководстве GNU Emacs), можно удалить тогда и только тогда, когда 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 является дочерним фреймом, она удаляет только соседние фреймы frame.

При наличии префиксного аргумента iconify фреймы сворачиваются в значки, а не удаляются.

Следующая функция проверяет, можно ли безопасно удалить фрейм. Она полезна, чтобы избежать ситуации, когда последующий вызов delete-frame не удаляет аргумент frame и/или сигнализирует об ошибке. Поэтому ваша программа Lisp должна вызывать delete-frame только в том случае, если следующая функция возвращает значение, отличное от nil.

Функция: frame-deletable-p &optional frame

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

В следующих случаях фрейм нельзя безопасно удалить:

  • Это единственный видимый фрейм или фрейм, свёрнутый в значок (см. Видимость фреймов) на своём терминале.
  • В нём размещено активное окно минибуфера, а окна минибуфера не следуют за выбранным фреймом (см. (emacs)Основы работы с минибуфером).
  • Все остальные видимые фреймы или фреймы, свёрнутые в значок, на том же терминале являются либо дочерними фреймами (см. Дочерние фреймы), либо имеют параметр delete-before со значением, отличным от nil.
  • В этом фрейме или одном из его потомков размещено окно минибуфера фрейма, который не является потомком данного фрейма (см. Дочерние фреймы).

Эти условия охватывают большинство случаев, в которых delete-frame может завершиться ошибкой при вызове с верхнего уровня. Они не учитывают некоторые особые случаи, например удаление фрейма во время операции перетаскивания (см. Перетаскивание). В таких случаях лучше обернуть вызов delete-frame в форму condition-case.

Когда выбранный фрейм удаляется, Emacs должен выбрать вместо него другой фрейм. Следующая настройка позволяет выбрать, какой именно.

Пользовательская настройка: delete-frame-choose-selected

Эта переменная задаёт, какой фрейм выбрать после удаления выбранного фрейма. Значение по умолчанию mru означает, что delete-frame должна попытаться выбрать фрейм, который использовался последним, согласно get-mru-frame (см. Фокус ввода), на том же терминале. Значение nil означает, что delete-frame попытается выбрать самый старый видимый фрейм на том же терминале, что и удалённый фрейм.

Copyright © 1990-1996, 1998-2026 Free Software Foundation, Inc.
Licensed under the GNU GPL license.
https://www.gnu.org/software/emacs/manual/html_node/elisp/Deleting-Frames.html

Spec-Zone.ru

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