Spec-Zone.ru › Elisp

Дополнительные параметры отображения буферов

Поведение действий по отображению буферов (см. Выбор окна для отображения буфера) можно дополнительно настроить с помощью следующих пользовательских параметров.

Пользовательский параметр: 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

Spec-Zone.ru

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