Spec-Zone.ru › Elisp

Буферы и окна

В этом разделе описаны низкоуровневые функции для изучения и задания содержимого окон. Функции более высокого уровня для отображения определённого буфера в окне см. в разделе Переключение на буфер в окне.

Функция: window-buffer &optional window

Эта функция возвращает буфер, отображаемый в window. Если window не указан или равен nil, по умолчанию используется выбранное окно. Если window — внутреннее окно, эта функция возвращает nil.

Функция: set-window-buffer window buffer-or-name &optional keep-margins

Эта функция отображает buffer-or-name в окне window. window должно быть действующим окном; если оно равно nil, по умолчанию используется выбранное окно. buffer-or-name должен быть буфером или именем существующего буфера. Эта функция не меняет выбранное окно и напрямую не меняет текущий буфер (см. Текущий буфер). Она возвращает nil.

Если окно window жёстко закреплено за буфером, а buffer-or-name указывает другой буфер, эта функция выдаёт ошибку. См. Закреплённые окна.

По умолчанию эта функция сбрасывает положение окна window, поля отображения, ширину полей и настройки полосы прокрутки в соответствии с локальными переменными указанного буфера. Однако если необязательный аргумент keep-margins не равен nil, настройки полей отображения, полей и полосы прокрутки окна window остаются без изменений.

При написании приложения обычно следует использовать display-buffer (см. Выбор окна для отображения буфера) или функции более высокого уровня, описанные в разделе Переключение на буфер в окне, вместо прямого вызова set-window-buffer.

Функция выполняет window-scroll-functions, а затем window-configuration-change-hook. См. Хуки прокрутки и изменений окна.

Переменная: buffer-display-count

Эта локальная для буфера переменная хранит количество раз, когда буфер отображался в окне. Она увеличивается каждый раз, когда для буфера вызывается set-window-buffer.

Переменная: buffer-display-time

Эта локальная для буфера переменная хранит время последнего отображения буфера в окне. Если буфер ещё ни разу не отображался, значение равно nil. Оно обновляется при каждом вызове set-window-buffer для буфера и получает значение, возвращаемое current-time (см. Время суток).

Функция: get-buffer-window &optional buffer-or-name all-frames

Эта функция возвращает первое окно, отображающее buffer-or-name, в циклическом порядке окон, начиная с выбранного окна (см. Циклический порядок окон). Если такого окна нет, возвращаемое значение — nil.

buffer-or-name должен быть буфером или именем буфера; если аргумент не указан или равен nil, по умолчанию используется текущий буфер. Необязательный аргумент all-frames определяет, какие окна рассматривать:

  • t означает рассматривать окна во всех существующих кадрах.
  • visible означает рассматривать окна во всех видимых кадрах.
  • 0 означает рассматривать окна во всех видимых или свёрнутых кадрах.
  • Кадр означает рассматривать только окна в этом кадре.
  • Любое другое значение означает рассматривать окна в выбранном кадре.

Обратите внимание, что эти значения несколько отличаются от значений аргумента all-frames функции next-window (см. Циклический порядок окон). В будущей версии Emacs эта функция может быть изменена, чтобы устранить это несоответствие.

Следующая функция позволяет определить, разделяет ли буфер определённого окна текст с каким-либо другим буфером (см. Косвенные буферы).

Функция: window-indirect-buffer-p &optional window buffer-or-name

Эта функция возвращает значение, не равное nil, если window косвенно связан с buffer-or-name. window должно быть действующим окном; по умолчанию используется выбранное окно. buffer-or-name может быть буфером или именем существующего буфера; по умолчанию используется текущий буфер.

window косвенно связан с buffer-or-name, если выполняется одно из следующих условий:

  • buffer-or-name указывает косвенный буфер, а буфер окна window является его базовым буфером.
  • Буфер окна window является косвенным буфером, базовый буфер которого указан в buffer-or-name.
  • И буфер окна window, и буфер, указанный в buffer-or-name, являются косвенными буферами, использующими один и тот же базовый буфер.

Если ни одно из перечисленных условий не выполняется, функция возвращает nil.

Функция: get-buffer-window-list &optional buffer-or-name minibuf all-frames indirect

Эта функция возвращает список всех окон, в которых сейчас отображается buffer-or-name. buffer-or-name должен быть буфером или именем существующего буфера. Если аргумент не указан или равен nil, по умолчанию используется текущий буфер. Если выбранное окно отображает buffer-or-name, оно будет первым в списке, возвращаемом этой функцией.

Аргументы minibuf и all-frames имеют те же значения, что и в функции next-window (см. Циклический порядок окон). Обратите внимание, что аргумент all-frames ведёт себя не в точности так же, как в get-buffer-window.

Если необязательный аргумент indirect не равен nil, к списку окон, отображающих buffer-or-name, добавляется список всех окон, косвенно связанных с buffer-or-name; это окна, для которых window-indirect-buffer-p (см. выше), вызванная с окном и буфером, указанным в buffer-or-name, в качестве аргументов, возвращает значение, не равное nil.

Команда: replace-buffer-in-windows &optional buffer-or-name

Эта команда заменяет buffer-or-name другим буфером во всех окнах, где он отображается. buffer-or-name должен быть буфером или именем существующего буфера; если аргумент не указан или равен nil, по умолчанию используется текущий буфер.

Буфер-замена в каждом окне обычно выбирается с помощью switch-to-prev-buffer (см. История окон). За исключением боковых окон (см. Боковые окна), любое закреплённое окно, отображающее buffer-or-name, по возможности удаляется (см. Закреплённые окна). Если такое окно — единственное окно в своём кадре, а на том же терминале есть другие кадры, удаляется и этот кадр. Если закреплённое окно — единственное окно в единственном кадре на своём терминале, буфер всё равно заменяется.

Главная цель этой функции — определить, что делать с окнами, буферы которых собираются уничтожить с помощью kill-buffer (см. Уничтожение буферов). Однако эта функция также удаляет буфер, указанный в buffer-or-name, из списков предыдущих и следующих буферов всех окон (см. История окон), включая мёртвые окна, на которые ссылаются только конфигурации окон, а также удаляет все параметры quit-restore или quit-restore-prev (см. Параметры окон), ссылающиеся на этот буфер.

Эта функция не заменяет буфер, указанный в buffer-or-name, ни в одном окне минибуфера, в котором он отображается, и не удаляет окна минибуфера или кадры минибуфера. Однако она удаляет этот буфер из списков предыдущих и следующих буферов всех окон минибуфера.

По умолчанию replace-buffer-in-windows удаляет только окна, закреплённые за своими буферами, и игнорирует любые параметры quit-restore или quit-restore-prev окон, с которыми работает. Следующая настройка позволяет обойти эти ограничения.

Пользовательская настройка: kill-buffer-quit-windows

Если эта настройка равна nil, kill-buffer (и, следовательно, replace-buffer-in-windows) может удалять только окна, закреплённые за буфером, который собираются уничтожить. Если значение не равно nil, replace-buffer-in-windows поручает функции quit-restore-window (см. Закрытие окон) обработать такие окна. Эта функция может удалить такое окно, даже если оно не закреплено за своим буфером. Кроме того, если окно нельзя удалить и в нём необходимо показать другой буфер, delete-windows-on использует quit-restore-window в качестве запасного варианта.

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/Buffers-and-Windows.html

Spec-Zone.ru

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