Spec-Zone.ru › Elisp

Сохранение размеров окна

Окно можно изменить размер явно, используя одну из функций из предыдущего раздела, или неявно, например, при изменении размера смежного окна, при разделении или удалении окна (см. Разделение окон, см. Удаление окон) или при изменении размера рамки окна (см. Размер рамки).

Можно избежать неявного изменения размера конкретного окна, когда на той же рамке есть одно или несколько других изменяемых окон. Для этой цели Emacs необходимо уведомить о необходимости сохранения размера этого окна. Существует два основных способа сделать это.

Переменная: window-size-fixed

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

Если значение равно height, то фиксируется только высота окна; если значение равно width, то фиксируется только ширина окна. Любое другое ненулевое значение фиксирует и ширину, и высоту.

Если эта переменная равна nil, это не обязательно означает, что любое окно, отображающее буфер, можно изменить размер в нужном направлении. Для определения этого используйте функцию window-resizable. См. Изменение размеров окон.

Часто window-size-fixed слишком агрессивен, потому что он препятствует любой попытке явно изменить размер или разделить затронутое окно. Это может произойти даже после того, как размер окна был изменен неявно, например, при удалении смежного окна или изменении размера рамки окна. Следующая функция старается никогда не запрещать явное изменение размера такого окна:

Функция: window-preserve-size &optional window horizontal preserve

Эта функция (от-)мечает высоту окна window как сохраненную для будущих операций изменения размера. window должно быть активным окном и по умолчанию равно выделенному. Если необязательный аргумент horizontal не равен nil, он (от-)мечает ширину window как сохраненную.

Если необязательный аргумент preserve равен t, это означает сохранение текущей высоты/ширины тела окна window. Высота/ширина окна window изменится только в том случае, если у Emacs нет лучшего варианта. Изменение размера окна, высота/ширина которого сохранена этой функцией, никогда не приводит к ошибке.

Если preserve равно nil, это означает прекращение сохранения высоты/ширины window, снимая любые соответствующие ограничения, наложенные предыдущим вызовом этой функции для window. Вызов функций enlarge-window, shrink-window или fit-window-to-buffer с window в качестве аргумента также может снять соответствующее ограничение.

window-preserve-size в настоящее время вызывается следующими функциями:

fit-window-to-buffer

Если необязательный аргумент preserve-size этой функции (см. Изменение размеров окон) не равен nil, размер, установленный этой функцией, сохраняется.

display-buffer

Если аргумент alist этой функции (см. Выбор окна) содержит запись preserve-size, размер окна, созданного этой функцией, сохраняется.

window-preserve-size устанавливает параметр окна (см. Параметры окна) с именем window-preserved-size, который используется функциями изменения размера окна. Этот параметр не будет препятствовать изменению размера окна, когда окно отображает другой буфер, чем тот, при котором был вызван window-preserve-size, или если его размер изменился с тех пор.

Следующую функцию можно использовать для проверки того, сохраняется ли высота конкретного окна:

Функция: window-preserved-size &optional window horizontal

Эта функция возвращает сохраненную высоту окна window в пикселях. window должно быть активным окном и по умолчанию равно выделенному. Если необязательный аргумент horizontal не равен nil, возвращает сохраненную ширину window. Возвращает nil, если размер 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/Preserving-Window-Sizes.html

Spec-Zone.ru

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