Spec-Zone.ru › Elisp

Список буферов

Список буферов — это список всех активных буферов. Порядок буферов в этом списке в первую очередь определяется тем, как недавно каждый буфер отображался в окне. Несколько функций, в частности other-buffer, используют этот порядок. Список буферов, отображаемый пользователю, также следует этому порядку.

Создание буфера добавляет его в конец списка буферов, а уничтожение буфера удаляет его из этого списка. Буфер перемещается в начало этого списка всякий раз, когда он выбирается для отображения в окне (см. Переключение буферов) или выбирается окно, отображающее его (см. Выбор окон). Буфер перемещается в конец списка, когда он скрыт (см. bury-buffer, ниже). Для программиста Lisp нет функций, которые напрямую манипулируют списком буферов.

Помимо основного списка буферов, описанного выше, Emacs поддерживает локальный список буферов для каждой рамки, в котором буферы, которые были отображены (или у которых были выбраны их окна) в этой рамке, стоят первыми. (Этот порядок записывается в параметре рамки buffer-list рамки; см. Параметры буферов.) Буферы, которые никогда не отображались в этой рамке, следуют после неё, упорядоченные по основному списку буферов.

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

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

Если frame — это рамка, то возвращается локальный список буферов frame. Если frame — nil или опущена, используется основной список буферов: буферы отображаются в порядке последнего отображения или выбора, независимо от того, в каких рамках они были отображены.

(buffer-list)
     ⇒ (#<buffer buffers.texi>
         #<buffer  *Minibuf-1*> #<buffer buffer.c>
         #<buffer *Help*> #<buffer TAGS>)
;; Note that the name of the minibuffer
;;   begins with a space!
(mapcar #'buffer-name (buffer-list))
    ⇒ ("buffers.texi" " *Minibuf-1*"
        "buffer.c" "*Help*" "TAGS")

Список, возвращаемый функцией buffer-list, построен специально; это не внутренняя структура данных Emacs, и изменение его не влияет на порядок буферов. Если вы хотите изменить порядок буферов в основном списке буферов, вот простой способ:

(defun reorder-buffer-list (new-list)
  (while new-list
    (bury-buffer (car new-list))
    (setq new-list (cdr new-list))))

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

Чтобы изменить порядок или значение списка буферов конкретной рамки, установите параметр этой рамки buffer-list с помощью modify-frame-parameters (см. Доступ к параметрам).

Функция: other-buffer &optional buffer visible-ok frame

Эта функция возвращает первый буфер в списке буферов, кроме buffer. Обычно это буфер, отображаемый в наиболее недавно выбранном окне (в рамке frame или же в выбранной рамке, см. Фокус ввода), кроме buffer. Буферы, чьи имена начинаются с пробела, вообще не рассматриваются.

Если buffer не указан (или если это не активный буфер), то other-buffer возвращает первый буфер в локальном списке буферов выбранной рамки. (Если frame не nil, он возвращает первый буфер в локальном списке буферов frame вместо этого.)

Если у frame есть параметр, отличный от nil buffer-predicate, то other-buffer использует этот предикат для определения, какие буферы учитывать. Он вызывает предикат для каждого буфера, и если значение равно nil, этот буфер игнорируется. См. Параметры буферов.

Если visible-ok равно nil, other-buffer избегает возвращения буфера, видимого в любом окне любой видимой рамки, за исключением крайнего случая. Если visible-ok не равно nil, то не имеет значения, отображается ли буфер где-либо или нет.

Если подходящий буфер не существует, возвращается буфер *scratch* (и создаётся, если необходимо).

Функция: last-buffer &optional buffer visible-ok frame

Эта функция возвращает последний буфер в списке буферов frame, кроме buffer. Если frame опущен или nil, используется список буферов выбранной рамки.

Аргумент visible-ok обрабатывается как с other-buffer, см. выше. Если подходящий буфер не найден, возвращается буфер *scratch*.

Команда: bury-buffer &optional buffer-or-name

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

Эта функция работает с параметром buffer-list каждой рамки, а также с основным списком буферов; следовательно, буфер, который вы скрываете, будет последним в значении (buffer-list frame) и в значении (buffer-list). Кроме того, он также помещает буфер в конец списка буферов выбранного окна (см. История окон), если он отображается в этом окне.

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

Чтобы заменить буфер во всех окнах, которые его отображают, используйте replace-buffer-in-windows, см. Буферы и окна.

Команда: unbury-buffer

Эта команда переключается на последний буфер в локальном списке буферов выбранной рамки. Точнее, она вызывает функцию switch-to-buffer (см. Переключение буферов), чтобы отобразить буфер, возвращаемый last-buffer (см. выше), в выбранном окне.

Переменная: buffer-list-update-hook

Это обычный хук, который выполняется всякий раз, когда список буферов меняется. Функции (неявно) выполняющие этот хук — get-buffer-create (см. Создание буферов), rename-buffer (см. Имена буферов), kill-buffer (см. Уничтожение буферов), bury-buffer (см. выше) и select-window (см. Выбор окон). Этот хук не выполняется для внутренних или временных буферов, созданных get-buffer-create или generate-new-buffer с аргументом inhibit-buffer-hooks, отличным от nil.

Функции, выполняемые этим хуком, должны избегать вызова select-window с аргументом norecord, равным nil, так как это может привести к бесконечной рекурсии.

Copyright © 1990-1996, 1998-2022 Free Software Foundation, Inc.
Licensed under the GNU GPL license.
https://www.gnu.org/software/emacs/manual/html_node/elisp/Buffer-List.html

Spec-Zone.ru

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