29.11 Буферы и окна

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

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

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

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

Эта функция заставляет окно window отображать buffer-or-name. 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 для устранения этого расхождения.

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

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

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

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

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

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