История окон
Каждое окно хранит список буферов, которые оно отображало ранее, и порядок, в котором эти буферы были из него удалены. Эта история используется, например, командой 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могут игнорировать этот параметр; например, если остаётся только один буфер, на который эти функции могут переключиться. -
- Пользовательский параметр: switch-to-prev-buffer-skip-regexp
Значением этого пользовательского параметра должно быть регулярное выражение или список регулярных выражений. Буферы, имена которых соответствуют одному из этих регулярных выражений, будут игнорироваться командами
switch-to-prev-bufferиswitch-to-next-buffer(кроме случаев, когда переключиться больше не на что).
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/Window-History.html