Spec-Zone.ru › Elisp

Закрытие окон

После того как команда использует display-buffer для отображения буфера на экране, пользователь может решить скрыть его и вернуться к предыдущей конфигурации отображения Emacs. Это называется закрытием окна. Для этого нужно вызвать quit-window, когда окно, использованное display-buffer, является выбранным окном.

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

Чтобы quit-window могла поступать правильно, display-buffer сохраняет информацию о выполненных действиях в параметре quit-restore окна (см. Параметры окон).

Команда: quit-window &optional kill window

Эта команда закрывает window и скрывает его буфер. (Она также может завершить работу с буфером, с учетом quit-window-kill-buffer; см. ниже.) Аргумент window должен быть действующим окном; по умолчанию используется выбранное окно. Если префиксный аргумент kill не равен nil, команда завершает работу с буфером, а не скрывает его.

Функция quit-window сначала выполняет quit-window-hook. Затем она вызывает функцию quit-restore-window, описанную ниже, которая выполняет основную работу.

Следующий параметр указывает quit-window, следует ли завершить работу с буфером window или скрыть его, когда аргумент kill равен nil.

Пользовательский параметр: quit-window-kill-buffer

Эта переменная определяет, завершает ли quit-window работу с буфером, переданным в качестве аргумента window. Если значение равно nil (значение по умолчанию), quit-window завершает работу с буфером window только в том случае, если аргумент kill не равен nil. Если значение равно t, quit-window попытается завершить работу с буфером window независимо от значения аргумента kill. В противном случае значением должен быть список основных режимов; quit-window завершит работу с буфером window независимо от значения kill, если основной режим этого буфера входит в данный список или является производным от одного из режимов в списке. Во всех остальных случаях quit-window завершит работу с буфером, только если kill не равен nil, а иначе скроет его.

Для большего контроля можно вызвать quit-restore-window вместо quit-window.

Функция: quit-restore-window &optional window bury-or-kill

Эта функция обрабатывает window и его буфер после закрытия окна. Необязательный аргумент window должен быть действующим окном; по умолчанию используется выбранное окно. Функция учитывает параметр quit-restore окна window.

Необязательный аргумент bury-or-kill задает способ обработки буфера window. Имеют значение следующие значения:

nil

Это означает, что с буфером не нужно обращаться каким-либо особым образом. В результате, если window не удалено, последующий вызов switch-to-prev-buffer обычно снова покажет этот буфер.

append

Это означает, что если window не удалено, его буфер перемещается в конец списка предыдущих буферов окна window (см. История окон), поэтому будущие вызовы switch-to-prev-buffer с меньшей вероятностью переключатся на него. Кроме того, буфер перемещается в конец списка буферов фрейма (см. Список буферов).

bury

Это означает, что если window не удалено, его буфер удаляется из списка предыдущих буферов окна window. Кроме того, буфер перемещается в конец списка буферов фрейма. Это самый надежный способ предотвратить повторное переключение switch-to-prev-buffer на этот буфер, если не считать завершения работы с буфером.

kill

Это означает завершение работы с буфером окна window.

killing

Обрабатывается так же, как kill, но предполагается, что работа с буфером window завершается где-то еще. Это значение используют replace-buffer-in-windows и quit-windows-on.

burying

Обрабатывается так же, как bury, но предполагается, что буфер window скрывается где-то еще. Это значение использует quit-windows-on.

Аргумент bury-or-kill также задает, что делать с фреймом окна window, если окно window следует удалить, оно является единственным окном во фрейме, а на том же терминале, что и этот фрейм, есть другие фреймы. Если bury-or-kill равен kill, это означает, что фрейм нужно удалить. В противном случае судьба фрейма определяется вызовом frame-auto-hide-function (см. ниже) с этим фреймом в качестве единственного аргумента.

Параметры quit-restore и quit-restore-prev окна (см. Параметры окон) направляют quit-restore-window в процессе обработки аргумента window. Если такой параметр отсутствует или равен nil, это обычно означает, что окно создано командой наподобие split-window-below или split-window-right (см. Разделение окна в Руководстве GNU Emacs), и quit-restore-window удалит окно, только если оно закреплено за своим буфером.

Если параметр не равен nil, он представляет собой список из четырех элементов:

(method obuffer owindow this-buffer)

Первый элемент, method, — один из четырех символов: window, frame, same и other. frame и window управляют удалением окна window, а same и other — отображением в нем другого буфера.

В частности, window означает, что окно было специально создано функцией display-buffer; frame означает, что был создан отдельный фрейм; same означает, что в окне отображался только этот буфер; other означает, что ранее в окне отображался другой буфер.

Второй элемент, obuffer, — это либо один из символов window или frame, либо список следующего вида:

(prev-buffer prev-window-start prev-window-point height)

Он указывает, какой буфер отображался в окне window ранее, а также начальную позицию окна в том буфере (см. Начальная и конечная позиции окна), позицию точки окна (см. Окна и точка) на тот момент и высоту окна window на тот момент. Если prev-buffer все еще активен при закрытии окна window, для его отображения окно window может быть использовано повторно.

Третий элемент, owindow, — это окно, выбранное непосредственно перед отображением буфера. Если при закрытии окна window оно удаляется, выполняется попытка выбрать owindow.

Четвертый элемент, this-buffer, — это буфер, отображение которого установило параметр quit-restore. При закрытии окна window информация, сохраненная этим параметром, используется только в том случае, если в окне все еще отображается этот буфер.

quit-restore-window пытается удалить свое окно window, если (1) method равен window или frame, (2) в истории окна нет ранее отображавшихся буферов и (3) this-buffer совпадает с буфером, отображаемым в окне window в данный момент. Если window является частью атомарного окна (см. Атомарные окна), вместо этого функция попытается удалить корень этого атомарного окна. В обоих случаях она старается не сигнализировать об ошибке, если окно window нельзя удалить.

Если obuffer — это список и prev-buffer все еще активен, при закрытии окна в нем отображается prev-buffer согласно остальным элементам obuffer. Это включает изменение размера окна до height, если его временно изменили для отображения this-buffer.

В противном случае, если окно window ранее использовалось для отображения других буферов (см. История окон), в нем отображается самый последний буфер из этой истории.

Концептуально параметр quit-restore используется для отмены первой операции отображения буфера в конкретном окне. Параметр quit-restore-prev используется для отмены последней операции отображения буфера в последовательности таких операций для конкретного окна. Любая операция отображения буфера в этом окне, выполненная между ними, отменяется путем отображения буфера, который ранее показывался в этом окне.

display-buffer настраивает параметр quit-restore любого используемого им окна, если это окно было создано самой функцией или не имеет параметра quit-restore, отличного от nil. Если у окна уже есть параметр quit-restore, display-buffer добавляет параметр quit-restore-prev, элемент method которого равен same или other. В обоих случаях, если у окна уже есть параметр quit-restore-prev или quit-restore, содержимое этого параметра может быть обновлено.

quit-restore-window сначала пытается найти подходящий параметр quit-restore-prev для своего окна, указывающий, какой буфер следует показать вместо текущего. Если такой параметр не найден, функция ищет подходящий параметр quit-restore, чтобы удалить окно или показать в нем другой буфер.

После использования одного из этих параметров quit-restore-window сбрасывает его в nil. Неиспользованные параметры остаются без изменений. Эти параметры также сбрасываются функцией replace-buffer-in-windows (см. Буферы и окна), если они ссылаются на буфер, работа с которым вскоре будет завершена, — либо на буфер, указанный в prev-buffer, либо на буфер, указанный в this-buffer.

Предполагается, что все операции с этими параметрами сохраняют следующий инвариант: если у окна есть параметр quit-restore-prev, отличный от nil, у него также есть параметр quit-restore, отличный от nil.

Следующий параметр позволяет quit-restore-window более решительно удалять свое окно.

Пользовательский параметр: quit-restore-window-no-switch

Если значение этого параметра равно nil, quit-restore-window всегда вызывает switch-to-prev-buffer, если только окно не было создано функцией display-buffer. Если значение равно t, quit-restore-window будет стараться переключаться только на буферы, ранее отображавшиеся в этом окне. Если значение — символ skip-first, переключение на предыдущий буфер произойдет только в том случае, если у окна есть как минимум два предыдущих буфера.

В обоих случаях, если quit-restore-window не переключается на предыдущий буфер, она вместо этого попытается удалить окно (и, возможно, его фрейм). Также обратите внимание, что если окно закреплено, quit-restore-window обычно не переключается в нем на предыдущий буфер.

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

Пользовательский параметр: frame-auto-hide-function

Функция, заданная этим параметром, вызывается для автоматического скрытия фреймов. Эта функция вызывается с одним аргументом — фреймом.

Указанная здесь функция вызывается функцией bury-buffer (см. Список буферов), когда выбранное окно закреплено и в нем отображается буфер, который нужно скрыть. Она также вызывается функцией quit-restore-window (см. выше), если фрейм закрываемого окна был специально создан для отображения буфера этого окна и работа с буфером не завершается.

По умолчанию вызывается iconify-frame (см. Видимость фреймов). Также можно указать delete-frame (см. Удаление фреймов), чтобы убрать фрейм с экрана, make-frame-invisible, чтобы сделать фрейм невидимым, ignore, чтобы оставить фрейм без изменений, или любую другую функцию, принимающую фрейм в качестве единственного аргумента.

Обратите внимание, что функция, заданная этим параметром, вызывается только в том случае, если указанный фрейм содержит лишь одно действующее окно и на том же терминале есть хотя бы один другой фрейм.

Для конкретного фрейма значение, указанное здесь, может быть переопределено параметром фрейма auto-hide-function (см. Параметры взаимодействия фрейма).

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/Quitting-Windows.html

Spec-Zone.ru

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