29.14 История окон

Каждое окно хранит в списке буферы, которые оно ранее отображало, и порядок, в котором эти буферы были из него удалены. Эта история используется, например, функцией 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 (кроме случая, когда нет другого буфера для переключения).