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