Spec-Zone.ru › Elisp

Неявное изменение размера фрейма

По умолчанию Emacs старается сохранять неизменным количество строк и столбцов в текстовой области фрейма (см. Макет фрейма), например, при переключении меню или панели инструментов, изменении шрифта по умолчанию или установке ширины полос прокрутки по умолчанию для этого фрейма. Когда эти элементы оформления отображаются средствами инструментария, обычно это означает, что Emacs приходится действовать вопреки этому инструментарию: последний, как правило, старается сохранить неизменным внешний размер фрейма при изменении размера элемента оформления, тем самым неявно меняя размер текстовой области фрейма.

На практике это означает, что всякий раз, когда Emacs отправляет запрос на добавление или удаление такого элемента оформления, он отправляет второй запрос, чтобы восстановить исходный размер текстовой области фрейма. Если эти элементы оформления отображаются самим Emacs (например, панель инструментов в сборках Lucid или MS-Windows либо панель вкладок), Emacs всё ещё может потребоваться соответственно изменить размер нативного фрейма и отправить запрос на изменение размера, поскольку эти элементы оформления не должны учитываться в текстовой области фрейма.

Иногда такое неявное изменение размера фрейма может быть нежелательным, например, когда фрейм развёрнут или переведён в полноэкранный режим (в этом случае оно по умолчанию отключено). В общем случае пользователи могут отключить неявное изменение размера с помощью следующего параметра:

Параметр пользователя: frame-inhibit-implied-resize

Если значение этого параметра — nil, изменение шрифта фрейма, строки меню, панели инструментов, внутренних границ, полей или полос прокрутки может привести к изменению размера внешнего фрейма, чтобы сохранить неизменным количество столбцов или строк в его текстовой области.

Если значение этого параметра — t, после согласования с оконным менеджером окончательного начального размера фрейма Emacs не будет изменять размер фрейма ни в одном из этих случаев. Точнее, это означает, что Emacs может неявно изменять размер фрейма до тех пор, пока не будут учтены все его элементы оформления и ему не будет присвоен начальный размер, запрошенный пользователем. Дальнейшие изменения элементов оформления не приведут к неявному изменению размера фрейма.

Если значением этого параметра является символ force, Emacs не будет выполнять неявное изменение размера фрейма даже до того, как согласует с оконным менеджером окончательный начальный размер фрейма. В результате начальный размер текстовой области фрейма может не соответствовать размеру, указанному пользователем. Это значение может быть полезно при использовании мозаичных оконных менеджеров, в которых начальный размер фрейма определяется внешними средствами.

Значением этого параметра также может быть список параметров фрейма. В этом случае неявное изменение размера фрейма будет запрещено при изменении любого параметра из этого списка после согласования Emacs с оконным менеджером окончательного начального размера фрейма. В настоящее время этот параметр обрабатывает следующие параметры: font, font-backend, internal-border-width, menu-bar-lines и tool-bar-lines.

Изменение любого из параметров фрейма scroll-bar-width, scroll-bar-height, vertical-scroll-bars, horizontal-scroll-bars, left-fringe и right-fringe обрабатывается так, как если бы фрейм содержал только одно активное окно. Это означает, например, что удаление вертикальных полос прокрутки во фрейме с несколькими расположенными рядом окнами уменьшит ширину внешнего фрейма на ширину одной полосы прокрутки, если значение этого параметра — nil, и не изменит её, если значение этого параметра — t или список, содержащий vertical-scroll-bars.

Значение по умолчанию — (tab-bar-lines tool-bar-lines) для Lucid, Motif и MS-Windows (то есть добавление или удаление панели инструментов либо панели вкладок в этих системах не изменяет высоту внешнего фрейма), (tab-bar-lines) во всех остальных оконных системах, включая GTK+ (то есть изменение любого из перечисленных выше параметров, кроме tab-bar-lines, может изменить размер внешнего фрейма), и t в остальных случаях (то есть размер внешнего фрейма никогда не меняется неявно при отсутствии поддержки со стороны оконной системы).

Обратите внимание: если фрейм недостаточно велик, чтобы вместить изменение любого из перечисленных выше параметров, Emacs может попытаться увеличить фрейм, даже если значение этого параметра не равно nil.

Также обратите внимание, что оконные менеджеры обычно не запрашивают изменение размера фрейма, когда меняют количество строк, занимаемых внешним меню или панелью инструментов. Обычно такие «переносы» происходят, когда пользователь уменьшает ширину фрейма, из-за чего становится невозможно отобразить все элементы меню или панели инструментов. Они также могут возникать при смене основного режима, изменяющей количество пунктов меню или элементов панели инструментов. Любые такие переносы могут неявно изменить количество строк в текстовой области фрейма, и на них не влияет значение этого параметра.

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/Implied-Frame-Resizing.html

Spec-Zone.ru

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