Удаление окон
Удаление окна исключает его из дерева окон фрейма. Если окно является живым, оно исчезает с экрана. Если окно является внутренним, его дочерние окна также удаляются.
Даже после удаления окно продолжает существовать как объект Lisp, пока на него остаются ссылки. Удаление окна можно отменить, восстановив сохранённую конфигурацию окон (см. Конфигурации окон).
- Команда: delete-window &optional window
-
Эта функция удаляет window с экрана и возвращает
nil. Если window не указано или равноnil, по умолчанию используется выбранное окно.Если удаление окна приведёт к тому, что в дереве окон не останется окон (например, если это единственное живое окно во фрейме), или все оставшиеся окна во фрейме window являются боковыми окнами (см. Боковые окна), сигнализируется ошибка. Если window является частью атомарного окна (см. Атомарные окна), эта функция пытается удалить корневое окно этого атомарного окна.
По умолчанию пространство, занимаемое window, передаётся одному из соседних окон-братьев, если таковые имеются. Однако, если переменная
window-combination-resizeне равнаnil, пространство пропорционально распределяется между всеми оставшимися окнами в той же комбинации окон. См. Перекомбинирование окон.Поведение этой функции может изменяться параметрами окна window, если переменная
ignore-window-parametersравнаnil. Если значение параметра окнаdelete-windowравноt, эта функция игнорирует все остальные параметры окна. В противном случае, если значение параметра окнаdelete-windowявляется функцией, эта функция вызывается с аргументом window вместо обычного действияdelete-window. См. Параметры окон.
Когда delete-window удаляет выбранное окно своего фрейма, ему необходимо сделать другое окно новым выбранным окном этого фрейма. Следующий параметр позволяет настроить, какое окно будет выбрано.
- Пользовательский параметр: delete-window-choose-selected
-
Этот параметр позволяет указать, какое окно должно стать выбранным окном фрейма после того, как
delete-windowудалит ранее выбранное окно. Возможны следующие варианты:-
mru(по умолчанию) означает выбрать окно, которое использовалось последним (см. Циклический порядок окон), отличное от выбранного окна этого фрейма. -
posозначает выбрать окно, содержащее позициюwindow-point(см. Окна и точка) ранее выбранного окна этого фрейма. -
nilозначает выбрать первое окно этого фрейма (окно, возвращаемое функциейframe-first-window; см. Окна и фреймы).
Окно, для которого
window-no-other-p(см. Циклический порядок окон) возвращает значение, отличное отnil, выбирается только в том случае, если параметрno-other-windowвсех остальных окон этого фрейма также имеет значение, отличное отnil. -
- Команда: delete-other-windows &optional window
-
Эта функция заставляет window заполнить свой фрейм, при необходимости удаляя другие окна. Если window не указано или равно
nil, по умолчанию используется выбранное окно. Если window является боковым окном (см. Боковые окна), сигнализируется ошибка. Если window является частью атомарного окна (см. Атомарные окна), эта функция пытается заставить корневое окно этого атомарного окна заполнить свой фрейм. Возвращаемое значение —nil.Поведение этой функции может изменяться параметрами окна window, если переменная
ignore-window-parametersравнаnil. Если значение параметра окнаdelete-other-windowsравноt, эта функция игнорирует все остальные параметры окна. В противном случае, если значение параметра окнаdelete-other-windowsявляется функцией, эта функция вызывается с аргументом window вместо обычного действияdelete-other-windows. См. Параметры окон.Кроме того, если
ignore-window-parametersравноnil, эта функция не удаляет окна, параметрno-delete-other-windowsкоторых не равенnil.
- Команда: delete-windows-on &optional buffer-or-name frame
-
Эта функция удаляет все окна, в которых отображается buffer-or-name, вызывая для них
delete-window. buffer-or-name должен быть буфером или именем буфера; если аргумент не указан или равенnil, по умолчанию используется текущий буфер. Если окон, отображающих указанный буфер, нет, функция ничего не делает. Если указанный буфер является минибуфером, сигнализируется ошибка.Если буфер отображается в выделенном окне, и это окно является единственным окном в своём фрейме, эта функция также удаляет этот фрейм, если он не является единственным фреймом на терминале.
Необязательный аргумент frame указывает, к каким фреймам следует применить действие:
-
nilозначает применить действие ко всем фреймам. -
tозначает применить действие к выбранному фрейму. -
visibleозначает применить действие ко всем видимым фреймам. -
0означает применить действие ко всем видимым или свёрнутым фреймам. - Фрейм означает применить действие к этому фрейму.
Обратите внимание, что значение этого аргумента отличается от его значения в других функциях, которые перебирают все живые окна (см. Циклический порядок окон). В частности, значения
tиnilздесь противоположны значениям этих аргументов в других функциях. -
Описанные выше команды явно удаляют окна. Однако Emacs может также неявно удалить окно, если считает, что его устранение интуитивнее, чем отображение в нём какого-либо несвязанного буфера. К неявному удалению окон могут приводить функции kill-buffer (см. Уничтожение буферов), quit-restore-window (см. Выход из окон) и bury-buffer (см. Список буферов). Некоторые из них удаляют окно только в том случае, если оно выделено для своего буфера (см. Выделенные окна). Другие удаляют окно, если оно было создано функцией display-buffer (см. Отображение буфера в подходящем окне). Некоторые функции также пытаются удалить фрейм окна вместе с самим окном, если на том же терминале есть другие фреймы и этот фрейм не содержит активное окно минибуфера.
Описанный далее хук можно использовать, чтобы предотвратить удаление окна этими функциями.
- Пользовательский параметр: window-deletable-functions
-
Это нестандартный хук, который можно использовать, чтобы предотвратить неявное удаление окна. Значением должен быть список функций, принимающих два аргумента. Первый аргумент — окно, которое собираются удалить. Второй аргумент, если он не равен
nil, означает, что окно является единственным окном в своём фрейме и будет удалено вместе с ним. Во время выполнения этого хука буфер окна является текущим.Если любая из этих функций возвращает
nil, окно не будет удалено, и в нём будет показан другой буфер. Этот хук (косвенно) вызывается функциямиquit-restore-window,kill-bufferиbury-buffer. Он не вызывается функциями, явно удаляющими окна, такими какdelete-window,delete-other-windowsилиdelete-windows-on.Этот хук даёт клиентскому коду возможность предотвратить удаление окна или его фрейма, если он может понадобиться для других целей.
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-Windows.html