Spec-Zone.ru › Elisp

Выход из окна

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

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

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

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

Эта команда закрывает window и скрывает его буфер. Аргумент window должен быть активным окном и по умолчанию устанавливается в выбранное. С префиксом kill, без nil, убивает буфер вместо его скрытия.

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

Для большего контроля можно вызвать quit-restore-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.

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

Эта функция всегда устанавливает параметр quit-restore окна window в nil, если она не удаляет окно.

Параметр 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 для отображения prev-buffer.

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

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

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

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

В противном случае, если 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-2022 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