Дополнительные параметры отображения буферов
Поведение действий по отображению буферов (см. Выбор окна для отображения буфера) можно дополнительно настроить с помощью следующих пользовательских параметров.
- Пользовательский параметр: pop-up-windows
-
Если значение этой переменной не равно
nil,display-bufferразрешается разделить существующее окно, чтобы создать новое окно для отображения буфера. Это значение используется по умолчанию.Эта переменная предусмотрена только для обратной совместимости. Её учитывает
display-bufferс помощью специального механизма вdisplay-buffer-fallback-action, который вызывает функцию действияdisplay-buffer-pop-up-window(см. Функции действий для отображения буфера), если значение этого параметра не равноnil. Самаdisplay-buffer-pop-up-windowк ней не обращается; пользователь может напрямую указать её вdisplay-buffer-alistи т. д.
- Пользовательский параметр: split-window-preferred-function
-
Эта переменная задаёт функцию для разделения окна с целью создания нового окна для отображения буфера. Она используется функцией действия
display-buffer-pop-up-windowдля фактического разделения окна.Значение должно быть функцией, принимающей один аргумент — окно — и возвращающей новое окно (которое будет использоваться для отображения нужного буфера) либо
nil(что означает, что разделение не удалось). Значение по умолчанию —split-window-sensibly; оно описано далее.
- Функция: split-window-sensibly &optional window
-
Эта функция пытается разделить window и вернуть вновь созданное окно. Если window нельзя разделить, она возвращает
nil. Если window не указано или равноnil, по умолчанию используется выбранное окно.Эта функция соблюдает обычные правила, определяющие, когда окно можно разделить (см. Разделение окон). Сначала она пытается разделить окно по вертикали, разместив новое окно ниже и соблюдая ограничение, заданное
split-height-threshold(см. ниже), либо по горизонтали, разместив новое окно справа и соблюдаяsplit-width-thresholdнаряду с другими ограничениями. То, будет ли сначала предпринята попытка вертикального или горизонтального разделения, зависит от значения пользовательского параметраsplit-window-preferred-direction. Если разделить окно по первому измерению не удаётся, функция пытается разделить его по другому измерению. Если это тоже не удаётся и окно является единственным окном в своём кадре, функция снова пытается разделить его и разместить новое окно ниже, не учитываяsplit-height-threshold. Если и эта попытка не удаётся, функция прекращает попытки и возвращаетnil.
- Пользовательский параметр: split-height-threshold
Эта переменная определяет, разрешено ли
split-window-sensiblyразделять окно, размещая новое окно ниже. Если значение — целое число, разделение выполняется только в том случае, если в исходном окне не меньше указанного числа строк. Если значение равноnil, такое разделение запрещено.
- Пользовательский параметр: split-width-threshold
Эта переменная определяет, разрешено ли
split-window-sensiblyразделять окно, размещая новое окно справа. Если значение — целое число, разделение выполняется только в том случае, если в исходном окне не меньше указанного числа столбцов. Если значение равноnil, такое разделение запрещено.
- Пользовательский параметр: split-window-preferred-direction
Эта переменная определяет первое измерение, по которому
split-window-sensiblyпытается разделить окно, если окно можно разделить и по вертикали, и по горизонтали, согласно значениямsplit-height-thresholdиsplit-width-threshold. Значение по умолчанию —longest: окно разделяется по вертикали, если высота кадра окна больше или равна его ширине, и по горизонтали в противном случае. Значенияverticalиhorizontalзадают направление первой попытки разделения.
- Пользовательский параметр: even-window-sizes
-
Если значение этой переменной не равно
nil,display-bufferвыравнивает размеры окон при повторном использовании существующего окна, смежного с выбранным.Если значение равно
width-only, размеры выравниваются только в том случае, если повторно используемое окно находится слева или справа от выбранного, а выбранное окно шире повторно используемого. Если значение равноheight-only, размеры выравниваются только в том случае, если повторно используемое окно находится над выбранным или под ним, а выбранное окно выше повторно используемого. Любое другое значение, не равноеnil, означает, что размеры выравниваются во всех этих случаях, если выбранное окно больше повторно используемого с учётом их совокупных размеров.
- Пользовательский параметр: pop-up-frames
-
Если значение этой переменной не равно
nil, это означает, чтоdisplay-bufferможет отображать буферы, создавая новые кадры. Значение по умолчанию —nil.Значение, не равное
nil, также означает, что при поиске окна, в котором уже отображается buffer-or-name,display-bufferможет просматривать любые видимые или свёрнутые кадры, а не только выбранный кадр.Запись с таким же именем в alist для
display-bufferимеет приоритет над этой переменной.Эта переменная предусмотрена главным образом для обратной совместимости. Её учитывает
display-bufferс помощью специального механизма вdisplay-buffer-fallback-action, который вызывает функцию действияdisplay-buffer-pop-up-frame(см. Функции действий для отображения буфера), если значение не равноnil. (Это происходит до попытки разделить окно.) Самаdisplay-buffer-pop-up-frameк этой переменной не обращается; пользователь может напрямую указать её вdisplay-buffer-alistи т. д.
- Пользовательский параметр: pop-up-frame-function
-
Эта переменная задаёт функцию для создания нового кадра с целью создания нового окна для отображения буфера. Она используется функцией действия
display-buffer-pop-up-frame.Значением должна быть функция без аргументов, возвращающая кадр или
nil, если создать кадр не удалось. Значение по умолчанию — функция, создающая кадр с параметрами, заданными вpop-up-frame-alist(см. ниже).
- Пользовательский параметр: pop-up-frame-alist
-
Эта переменная содержит список параметров кадра (см. Параметры кадра), который используется функцией, заданной в
pop-up-frame-function, для создания нового кадра. Значение по умолчанию —nil.Этот параметр предусмотрен только для обратной совместимости. Обратите внимание: когда
display-buffer-pop-up-frameвызывает функцию, заданную вpop-up-frame-function, она добавляет в началоpop-up-frame-alistзначения всех записей списка действийpop-up-frame-parameters, поэтому значения, заданные в записи списка действий, фактически имеют приоритет над соответствующими значениямиpop-up-frame-alist.Поэтому вместо настройки
pop-up-frame-alistпользователям следует добавить запись списка действийpop-up-frame-parametersвdisplay-buffer-alist. Только так можно гарантировать, что значение параметра, заданное пользователем, переопределит значение этого параметра, заданное вызывающей сторонойdisplay-buffer.
При разработке display-buffer было приложено немало усилий, чтобы сохранить совместимость с кодом, использующим такие устаревшие параметры, как pop-up-windows, pop-up-frames, pop-up-frame-alist, same-window-buffer-names и same-window-regexps. Lisp-программам и пользователям следует воздерживаться от использования этих параметров. Выше мы уже предостерегали от настройки pop-up-frame-alist. Здесь мы расскажем, как заменить остальные параметры действиями отображения.
-
pop-up-windows -
По умолчанию эта переменная имеет значение
t. Вместо того чтобы задавать ей значениеnilи тем самым указыватьdisplay-buffer, чего не следует делать, гораздо лучше перечислить вdisplay-buffer-base-actionфункции действий, которые следует попробовать, например:(setopt display-buffer-base-action '((display-buffer-reuse-window display-buffer-same-window display-buffer-in-previous-window display-buffer-use-some-window))) -
pop-up-frames -
Вместо того чтобы задавать этой переменной значение
t, можно настроитьdisplay-buffer-base-action, например, следующим образом:(setopt display-buffer-base-action '(nil (pop-up-frames . t)))
-
same-window-buffer-names same-window-regexps-
Вместо добавления имени буфера или регулярного выражения в один из этих параметров используйте запись
display-buffer-alistдля этого буфера, указав функцию действияdisplay-buffer-same-window.(setopt display-buffer-alist (cons '("\\*foo\\*" (display-buffer-same-window)) display-buffer-alist))
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/Choosing-Window-Options.html