Удаление фреймов
Активный фрейм — это фрейм, который не был удалён. При удалении фрейма он исчезает с экрана терминала, хотя может продолжать существовать как объект 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со значением forcenilдля всех фреймов, которые следует удалить.Эта функция не удаляет дочерние фреймы 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