Функции действий для отображения буфера
Функция действия — это функция, которую display-buffer вызывает для выбора окна отображения буфера. Функции действия принимают два аргумента: buffer, буфер для отображения, и alist, список действий (см. Списки действий отображения буфера). Они должны возвращать окно, отображающее buffer, если успешно, и nil в случае неудачи.
Следующие основные функции действия определены в Emacs.
- Функция: display-buffer-same-window buffer alist
Эта функция пытается отобразить buffer в выбранном окне. Она терпит неудачу, если выбранное окно является минибуферным окном или выделено для другого буфера (см. Выделенные окна). Она также терпит неудачу, если alist содержит не-
nilinhibit-same-windowзапись.
- Функция: display-buffer-reuse-window buffer alist
-
Эта функция пытается отобразить buffer, найдя окно, которое уже отображает его. Окна на выбранной вкладке предпочтительнее окон на других вкладках.
Если alist содержит не-
nilinhibit-same-windowзапись, выбранное окно не подходит для повторного использования. Набор вкладок, в которых необходимо искать окно, отображающее buffer, может быть указан с помощью записи в списке действийreusable-frames. Если alist не содержит записиreusable-frames, эта функция ищет только на выбранной вкладке.Если эта функция выбирает окно на другой вкладке, она делает эту вкладку видимой и, если alist не содержит записи
inhibit-switch-frame, поднимает эту вкладку, если необходимо.
- Функция: display-buffer-reuse-mode-window buffer alist
-
Эта функция пытается отобразить buffer, найдя окно, которое отображает буфер в заданном режиме.
Если alist содержит запись
mode, ее значение определяет основной режим (символ) или список основных режимов. Если alist не содержит записиmode, вместо этого используется текущий основной режим buffer. Окно является кандидатом, если оно отображает буфер, чья мода происходит от одного из указанных режимов.Поведение также контролируется записями alist для
inhibit-same-window,reusable-framesиinhibit-switch-frame, как иdisplay-buffer-reuse-window.
- Функция: display-buffer-pop-up-window buffer alist
-
Эта функция пытается отобразить buffer, разделив самое большое или наименее недавно используемое окно (обычно расположенное на выбранной вкладке). Она фактически выполняет разделение, вызывая функцию, указанную в
split-window-preferred-function(см. Выбор параметров окна).Размер нового окна можно настроить, предоставив записи
window-heightиwindow-widthв alist. Если alist содержит записьpreserve-size, Emacs также попытается сохранить размер нового окна во время будущих операций изменения размера (см. Сохранение размеров окна).Функция терпит неудачу, если ни одно окно нельзя разделить. Чаще всего это происходит потому, что ни одно окно недостаточно велико, чтобы позволить разделение. Уменьшение значений
split-height-thresholdилиsplit-width-thresholdможет помочь в этом отношении. Разделение также терпит неудачу, когда у выбранной вкладки есть параметр вкладкиunsplittable; см. Параметры буфера.
- Функция: display-buffer-in-previous-window buffer alist
-
Эта функция пытается отобразить buffer в окне, где он был отображен ранее.
Если alist содержит не-
nilinhibit-same-windowзапись, выбранное окно не подходит для использования. Выделенное окно пригодно только в том случае, если оно уже показывает buffer. Если alist содержит записьprevious-window, окно, указанное этой записью, пригодно для использования даже если оно никогда раньше не показывало buffer.Если alist содержит запись
reusable-frames(см. Списки действий отображения буфера), ее значение определяет, какие вкладки необходимо искать для подходящего окна. Если alist не содержит записиreusable-frames, эта функция ищет только на выбранной вкладке, еслиdisplay-buffer-reuse-framesиpop-up-framesобаnil; она ищет все вкладки на текущем терминале, если хотя бы одна из этих переменных не-nil.Если несколько окон подходят для использования в соответствии с этими правилами, эта функция делает выбор в следующем порядке предпочтения:
- Окно, указанное любой записью
previous-windowalist, при условии, что это не выбранное окно. - Окно, которое ранее показывало buffer, при условии, что это не выбранное окно.
- Выбранное окно, если оно указано записью
previous-windowalist или ранее показывало buffer.
- Окно, указанное любой записью
- Функция: display-buffer-use-some-window buffer alist
Эта функция пытается отобразить buffer, выбрав существующее окно и отобразив буфер в этом окне. Она может потерпеть неудачу, если все окна выделены для других буферов (см. Выделенные окна).
- Функция: display-buffer-use-least-recent-window buffer alist
Эта функция похожа на
display-buffer-use-some-window, но не будет повторно использовать текущее окно и будет использовать окно, к которому последний раз обращались.
- Функция: display-buffer-in-direction buffer alist
-
Эта функция пытается отобразить buffer в заданном alist местоположении. Для этого alist должен содержать запись
direction, значением которой является один изleft,above(илиup),rightиbelow(илиdown). Другие значения обычно интерпретируются какbelow.Если alist также содержит запись
window, ее значение определяет окно-ссылку. Это значение может быть специальным символом, напримерmain, который обозначает основное окно выбранной вкладки (см. Параметры и функции бокового окна) илиroot, обозначающее корневое окно выбранной вкладки (см. Окна и вкладки). Это также может быть любое другое допустимое окно. Любое другое значение (или полное отсутствие записиwindow) означает использование выбранного окна в качестве окна-ссылки.Эта функция сначала пытается повторно использовать окно в заданном направлении, которое уже показывает buffer. Если такого окна нет, она пытается разделить окно-ссылку, чтобы создать новое окно в заданном направлении. Если и это не удается, она попытается отобразить buffer в существующем окне в указанном направлении. В любом случае выбранное окно будет находиться по стороне от окна-ссылки, указанной записью
direction, совмещая хотя бы одну сторону с окном-ссылкой.Если окно-ссылка активно, сторона, которую совмещает выбранное окно, всегда противоположна стороне, указанной записью
direction. Например, если значение записиdirectionравноleft, правая граница (см. Координаты и окна) выбранного окна будет равна левой границе окна-ссылки.Если окно-ссылка внутреннее, повторно используемое окно должно совмещать с ним сторону, указанную записью
direction. Поэтому, если, например, окно-ссылка является корневым окном вкладки, и значение записиdirectionравноleft, повторно используемое окно должно быть слева от вкладки. Это означает, что левая граница выбранного окна и левая граница окна-ссылки будут одинаковыми.Однако новое окно будет создано путем разделения окна-ссылки таким образом, чтобы выбранное окно совмещало противоположную сторону с окном-ссылкой. В нашем примере новое корневое окно будет создано с новым активным окном и окном-ссылкой в качестве дочерних элементов. В этом случае правая граница выбранного окна будет равна левой границе окна-ссылки. Ее левая граница будет равна левой границе нового корневого окна вкладки.
Четыре специальных значения для записей
directionпозволяют неявно указать основное окно выбранной вкладки в качестве окна-ссылки:leftmost,top,rightmostиbottom. Это означает, что вместо, например,(direction . left) (window . main)можно просто указать(direction . leftmost). Существующая записьwindowalist игнорируется в таких случаях.
- Функция: display-buffer-below-selected buffer alist
-
Эта функция пытается отобразить buffer в окне ниже выбранного окна. Если ниже выбранного окна есть окно, которое уже отображает buffer, оно будет повторно использовано.
Если такого окна нет, эта функция пытается создать новое окно путем разделения выбранного, и отображает buffer там. Она также попытается настроить размер этого окна, если alist содержит соответствующую запись
window-heightилиwindow-width, см. выше.Если разделение выбранного окна терпит неудачу, и ниже выбранного окна есть окно, не выделенное для другого буфера, показывающее другой буфер, эта функция пытается использовать это окно для отображения buffer.
Если alist содержит запись
window-min-height, эта функция гарантирует, что используемое окно будет или сможет стать по крайней мере таким же высоким, как указано в значении этой записи. Обратите внимание, что это только гарантия. Чтобы фактически изменить размер используемого окна, alist также должен содержать соответствующую записьwindow-height.
- Функция: display-buffer-at-bottom buffer alist
-
Эта функция пытается отобразить buffer в окне внизу выбранной вкладки.
Это либо пытается разделить окно внизу вкладки, или корневое окно вкладки, или повторно использовать существующее окно внизу выбранной вкладки.
- Функция: display-buffer-pop-up-frame buffer alist
Эта функция создаёт новый фрейм и отображает буфер в окне этого фрейма. Фрейм создаётся путём вызова функции, указанной в
pop-up-frame-function(см. Выбор параметров окна). Если alist содержит записьpop-up-frame-parameters, соответствующее значение добавляется в параметры вновь созданного фрейма.
- Функция: display-buffer-in-child-frame buffer alist
-
Эта функция пытается отобразить buffer в дочернем фрейме (см. Дочерние фреймы) выбранного фрейма, либо повторно используя существующий дочерний фрейм, либо создавая новый. Если alist имеет запись, отличную от
nilchild-frame-parameters, соответствующее значение представляет собой список параметров фрейма, которые будут переданы новому фрейму. По умолчанию предоставляется параметрparent-frame, указывающий на выбранный фрейм. Если дочерний фрейм должен стать дочерним фреймом другого фрейма, соответствующая запись должна быть добавлена в alist.Внешний вид дочерних фреймов в значительной степени зависит от параметров, предоставленных через alist. Рекомендуется использовать, как минимум, пропорции для указания размера (см. Параметры размера) и положения (см. Параметры позиции) дочернего фрейма, а также добавить параметр
keep-ratio(см. Параметры взаимодействия фреймов), чтобы убедиться, что дочерний фрейм остаётся видимым. Для других параметров, которые следует учесть, см. Дочерние фреймы.
- Функция: display-buffer-use-some-frame buffer alist
-
Эта функция пытается отобразить buffer, найдя фрейм, который удовлетворяет определённому условию (по умолчанию – любой фрейм, кроме выбранного).
Если эта функция выбирает окно на другом фрейме, она делает этот фрейм видимым и, если в alist нет записи
inhibit-switch-frame, поднимает этот фрейм при необходимости.Если alist имеет запись, отличную от
nilframe-predicate, её значение представляет собой функцию, принимающую один аргумент (фрейм) и возвращающую неnil, если фрейм является кандидатом; эта функция заменяет стандартное условие.Если alist имеет запись, отличную от
nilinhibit-same-window, выбранное окно не используется; таким образом, если у выбранного фрейма есть только одно окно, оно не используется.
- Функция: display-buffer-no-window buffer alist
-
Если alist содержит запись, отличную от
nilallow-no-window, функция не отображает buffer и возвращает символfail. Это единственное исключение из правила, что функция действия возвращает либоnil, либо окно, отображающее buffer. Если в alist нет такой записиallow-no-window, функция возвращаетnil.Если функция возвращает
fail,display-bufferпропустит выполнение любых последующих действий отображения и вернётnilнемедленно. Если функция возвращаетnil,display-bufferпродолжит выполнение следующего действия отображения, если оно есть.Предполагается, что когда вызывающий
display-bufferуказывает запись, отличную отnilallow-no-window, он также способен обработать возвращаемое значениеnil.
Две другие функции действия описаны в соответствующих разделах – display-buffer-in-side-window (см. Отображение буферов в боковых окнах) и display-buffer-in-atom-window (см. Атомарные окна).
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-Display-Action-Functions.html