Выбор окна для отображения буфера
Команда display-buffer гибко выбирает окно для отображения и отображает указанный буфер в этом окне. Ее можно вызвать интерактивно, используя сочетание клавиш C-x 4 C-o. Она также используется как подпрограмма многими функциями и командами, включая switch-to-buffer и pop-to-buffer (см. Переключение буферов).
Эта команда выполняет несколько сложных шагов для поиска окна для отображения. Эти шаги описываются с помощью действий отображения, имеющих вид (functions . alist). Здесь, функции — это либо одна функция, либо список функций, называемых «функциями действий» (см. Функции действий отображения буфера); а список_ассоциаций — это список ассоциаций, называемый «список_ассоциаций_действий» (см. Список ассоциаций действий отображения буфера). Обратитесь к Философия отображения буфера для примеров действий отображения.
Функция действия принимает два аргумента: буфер для отображения и список ассоциаций действий. Она пытается отобразить буфер в некотором окне, выбирая или создавая окно в соответствии со своими собственными критериями. При успехе она возвращает окно; в противном случае она возвращает nil.
display-buffer работает, комбинируя действия отображения из нескольких источников и вызывая функции действий по очереди, пока одна из них не сможет отобразить буфер и не вернёт ненулевое значение.
- Команда: display-buffer буфер-или-имя &необязательно действие рамка
-
Эта команда отображает буфер-или-имя в некотором окне, не выбирая окно или не делая буфер текущим. Аргумент буфер-или-имя должен быть буфером или именем существующего буфера. Возвращаемое значение — окно, выбранное для отображения буфера, или
nil, если подходящее окно не найдено.Необязательный аргумент действие, если он не
nil, обычно должен быть действием отображения (описано выше).display-bufferстроит список функций действий и список ассоциаций действий, объединяя действия отображения из следующих источников (в порядке их приоритета, от высшего к низшему):- Переменная
display-buffer-overriding-action. - Пользовательский параметр
display-buffer-alist. - Аргумент действие.
- Пользовательский параметр
display-buffer-base-action. - Константа
display-buffer-fallback-action.
На практике это означает, что
display-bufferстроит список всех функций действий, указанных в этих действиях отображения. Первый элемент этого списка — это первая функция действия, указанная вdisplay-buffer-overriding-action, если таковая имеется. Его последний элемент —display-buffer-pop-up-frame— последняя функция действия, указанная вdisplay-buffer-fallback-action. Дубликаты не удаляются из этого списка — следовательно, одна и та же функция действия может вызываться несколько раз во время одного вызоваdisplay-buffer.display-bufferвызывает функции действий, указанные в этом списке по очереди, передавая буфер в качестве первого аргумента и объединённый список ассоциаций действий в качестве второго аргумента, пока одна из функций не вернёт ненулевое значение. См. Порядок функций действий для примеров, как действия отображения, указанные из разных источников, обрабатываютсяdisplay-buffer.Обратите внимание, что второй аргумент всегда является списком всех записей списка ассоциаций действий, указанных в вышеупомянутых источниках. Следовательно, первый элемент этого списка — первая запись списка ассоциаций действий, указанная в
display-buffer-overriding-action, если таковая имеется. Его последний элемент — последняя запись списка ассоциаций вdisplay-buffer-base-action, если таковая имеется (список ассоциаций действийdisplay-buffer-fallback-actionпуст).Обратите также внимание, что объединённый список ассоциаций действий может содержать дублирующиеся записи и записи для одного и того же ключа с разными значениями. Как правило, функции действий всегда используют первую ассоциацию ключа, которую они находят. Следовательно, ассоциация, используемая функцией действия, не обязательно является ассоциацией, предоставленной действием отображения, которое указало эту функцию действия.
Аргумент действие также может иметь ненулевое, не-списковое значение. Это имеет специальное значение, что буфер должен быть отображён в окне, отличном от выбранного, даже если выбранное окно уже отображает его. Если вызывается интерактивно с префиксным аргументом, действие —
t. Программы Lisp должны всегда передавать списковое значение.Необязательный аргумент рамка, если он ненулевой, указывает, какие рамки следует проверять при принятии решения о том, отображается ли буфер. Это эквивалентно добавлению элемента
(reusable-frames . frame)в список ассоциаций действий действие (см. Список ассоциаций действий отображения буфера). Аргумент рамка предоставляется для совместимости, программы Lisp не должны его использовать. - Переменная
- Переменная: display-buffer-overriding-action
Значение этой переменной должно быть действием отображения, которое обрабатывается с наивысшим приоритетом
display-buffer. Значение по умолчанию — пустое действие отображения, т.е.(nil . nil).
- Пользовательский параметр: display-buffer-alist
Значение этого параметра — список ассоциаций, сопоставляющий условия с действиями отображения. Каждое условие может быть либо регулярным выражением, сопоставляющим имя буфера, либо функцией, которая принимает два аргумента: имя буфера и аргумент действие, переданный
display-buffer. Если либо имя буфера, переданногоdisplay-buffer, соответствует регулярному выражению в этом списке ассоциаций, либо функция, указанная условием, возвращает ненулевое значение, тоdisplay-bufferиспользует соответствующее действие отображения для отображения буфера.
- Пользовательский параметр: display-buffer-base-action
Значение этого параметра должно быть действием отображения. Этот параметр можно использовать для определения стандартного действия отображения для вызовов
display-buffer.
- Константа: display-buffer-fallback-action
Это действие отображения определяет поведение по умолчанию для
display-bufferв случае отсутствия других действий отображения.
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/Choosing-Window.html