Сохранение размеров окна
Окно можно изменить размер явно, используя одну из функций из предыдущего раздела, или неявно, например, при изменении размера смежного окна, при разделении или удалении окна (см. Разделение окон, см. Удаление окон) или при изменении размера рамки окна (см. Размер рамки).
Можно избежать неявного изменения размера конкретного окна, когда на той же рамке есть одно или несколько других изменяемых окон. Для этой цели 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