История окон
Каждое окно запоминает в списке буферы, которые оно ранее отображало, и порядок, в котором эти буферы были из него удалены. Эта история используется, например, функцией replace-buffer-in-windows (см. Буферы и окна), а также при закрытии окон (см. Закрытие окон). Список автоматически поддерживается Emacs, но вы можете использовать следующие функции для явного просмотра или изменения его:
- Функция: window-prev-buffers &optional window
-
Эта функция возвращает список, определяющий предыдущее содержимое окна window. Необязательный аргумент window должен быть активным окном и по умолчанию равен выбранному.
Каждый элемент списка имеет вид
(buffer window-start window-pos), где buffer — буфер, ранее отображавшийся в окне, window-start — позиция начала окна (см. Начало и конец окна) в момент последнего отображения этого буфера, а window-pos — позиция курсора (см. Позиция курсора в окне) в момент последнего отображения этого буфера в окне window.Список упорядочен так, что более ранние элементы соответствуют более недавно отображенным буферам, а первый элемент обычно соответствует буферу, который был последним удалён из окна.
- Функция: set-window-prev-buffers window prev-buffers
Эта функция устанавливает предыдущие буферы окна window в значение prev-buffers. Аргумент window должен быть активным окном и по умолчанию равен выбранному. Аргумент prev-buffers должен быть списком той же формы, что и возвращаемый
window-prev-buffers.
Кроме того, каждое окно поддерживает список следующих буферов, который представляет собой список буферов, повторно отображаемых функцией switch-to-prev-buffer (см. ниже). Этот список в основном используется функциями switch-to-prev-buffer и switch-to-next-buffer для выбора буферов для переключения.
- Функция: window-next-buffers &optional window
Эта функция возвращает список буферов, недавно повторно отображённых в окне window посредством
switch-to-prev-buffer. Аргумент window должен обозначать активное окно илиnil(то есть выбранное окно).
- Функция: set-window-next-buffers window next-buffers
Эта функция устанавливает список следующих буферов окна window в next-buffers. Аргумент window должен быть активным окном или
nil(то есть выбранное окно). Аргумент next-buffers должен быть списком буферов.
Следующие команды могут использоваться для циклического перехода по глобальному списку буферов, подобно bury-buffer и unbury-buffer. Однако они циклически переходят по списку истории указанного окна, а не по глобальному списку буферов. Кроме того, они восстанавливают специфичные для окна позиции начала и курсора в окне и могут отображать буфер, даже если он уже отображен в другом окне. Команда switch-to-prev-buffer, в частности, используется функциями replace-buffer-in-windows, bury-buffer и quit-window для поиска заменяющего буфера для окна.
- Команда: switch-to-prev-buffer &optional window bury-or-kill
-
Эта команда отображает предыдущий буфер в окне window. Аргумент window должен быть активным окном или
nil(то есть выбранное окно). Если необязательный аргумент bury-or-kill отличен отnil, это означает, что буфер, который сейчас отображается в окне window, собираются закрыть или уничтожить, и поэтому его не следует переключать в будущих вызовах этой команды.Предыдущий буфер обычно является буфером, показанным перед буфером, который в данный момент показан в окне window. Однако буфер, который был закрыт или уничтожен, или который был уже показан в недавнем вызове
switch-to-prev-buffer, не считается предыдущим буфером.Если многократные вызовы этой команды уже показали все буферы, ранее показанные в окне window, дальнейшие вызовы покажут буферы из списка буферов фрейма, на котором расположено окно window (см. Список буферов).
Нижеописанная опция
switch-to-prev-buffer-skipможет быть использована для запрета переключения на определённые буферы, например, на те, которые уже отображены в другом окне. Кроме того, если фрейм окна window имеет параметрbuffer-predicate(см. Параметры буфера), это условие может запретить переключение на определённые буферы.
- Команда: switch-to-next-buffer &optional window
-
Эта команда переключается на следующий буфер в окне window, тем самым отменяя действие последней команды
switch-to-prev-bufferв окне window. Аргумент window должен быть активным окном и по умолчанию равен выбранному.Если нет недавнего вызова
switch-to-prev-buffer, который можно отменить, эта функция пытается отобразить буфер из списка буферов фрейма, на котором расположено окно window (см. Список буферов).Опция
switch-to-prev-buffer-skipи параметрbuffer-predicate(см. Параметры буфера) фрейма окна window влияют на эту команду так же, как и на командуswitch-to-prev-buffer.
По умолчанию switch-to-prev-buffer и switch-to-next-buffer могут переключаться на буфер, который уже отображается в другом окне. Следующая опция может быть использована для переопределения этого поведения.
- Пользовательская опция: switch-to-prev-buffer-skip
-
Если эта переменная имеет значение
nil,switch-to-prev-bufferможет переключаться на любой буфер, включая те, которые уже отображены в других окнах.Если эта переменная имеет значение, отличное от
nil,switch-to-prev-bufferоткажется от переключения на определённые буферы. Следующие значения могут быть использованы:-
thisозначает, что не следует переключаться на буфер, отображённый на фрейме, на котором находится окно, на которое действуетswitch-to-prev-buffer. -
visibleозначает, что не следует переключаться на буфер, отображённый на любом видимом фрейме. - 0 (число ноль) означает, что не следует переключаться на буфер, отображённый на любом видимом или свёрнутом фрейме.
-
tозначает, что не следует переключаться на буфер, отображённый на любом активном фрейме. - Функция, которая принимает три аргумента — аргумент window команды
switch-to-prev-buffer, буфер, на которыйswitch-to-prev-bufferнамеревается переключиться, и аргумент bury-or-kill командыswitch-to-prev-buffer. Если эта функция возвращает значение, отличное отnil,switch-to-prev-bufferоткажется от переключения на указанный во втором аргументе буфер.
Команда
switch-to-next-bufferподчиняется этой опции аналогичным образом. Если эта опция задаёт функцию,switch-to-next-bufferвызовет эту функцию с третьим аргументом, всегда равнымnil.Обратите внимание, что поскольку
switch-to-prev-bufferвызывается функциямиbury-buffer,replace-buffer-in-windowsиquit-restore-window, настройка этой опции может также повлиять на поведение Emacs при закрытии окна или закрытии/скрытии буфера.Обратите также внимание, что в некоторых ситуациях функции
switch-to-prev-bufferиswitch-to-next-bufferмогут игнорировать эту опцию, например, когда остаётся только один буфер, на который эти функции могут переключиться. -
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/Window-History.html