Выход из окна
После того, как команда использует 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