Spec-Zone.ru › Elisp

Удаление окон

Удаление окна исключает его из дерева окон фрейма. Если окно является живым, оно исчезает с экрана. Если окно является внутренним, его дочерние окна также удаляются.

Даже после удаления окно продолжает существовать как объект 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

Spec-Zone.ru

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