Spec-Zone.ru › Elisp

История окон

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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API