Размер фрейма
Канонический способ задать размер фрейма из Emacs — указать его размер текстовой области: кортеж, состоящий из ширины и высоты текстовой области фрейма (см. Компоновка фрейма). Его можно измерять в пикселях или в единицах канонического размера символа фрейма (см. Шрифт фрейма).
Для фреймов со встроенной строкой меню или панелью инструментов точную собственную высоту фрейма нельзя определить до его фактической отрисовки. Это означает, что в общем случае нельзя использовать собственный размер для задания начального размера фрейма. Как только вам станет известен собственный размер видимого фрейма, можно вычислить его внешний размер (см. Компоновка фрейма), прибавив оставшиеся компоненты из возвращаемого значения frame-geometry. Однако для невидимых фреймов или фреймов, которые ещё не созданы, внешний размер можно только оценить. Это также означает, что невозможно вычислить точное начальное положение фрейма, заданное смещениями от правого или нижнего края экрана (см. Положение фрейма).
Размер текстовой области любого фрейма можно задавать и получать с помощью параметров фрейма height и width (см. Параметры размера). Размер текстовой области начального фрейма также можно задать с помощью спецификации геометрии в стиле X. См. Аргументы командной строки для запуска Emacs в Руководстве GNU Emacs. Ниже перечислены функции для получения и задания размера существующего видимого фрейма — по умолчанию выбранного.
- Функция: frame-height &optional frame
- Функция: frame-width &optional frame
-
Эти функции возвращают высоту и ширину текстовой области frame, измеренные в единицах высоты и ширины шрифта по умолчанию для frame (см. Шрифт фрейма). Эти функции — просто сокращённые варианты записи
(frame-parameter frame 'height)и(frame-parameter frame 'width).Если размер текстовой области frame в пикселях не кратен размеру шрифта по умолчанию, значения, возвращаемые этими функциями, округляются вниз до количества символов шрифта по умолчанию, полностью помещающихся в текстовую область.
Следующие функции возвращают ширину и высоту в пикселях для собственного, внешнего и внутреннего фрейма, а также для его текстовой области (см. Компоновка фрейма). Для текстового терминала результаты указываются в символах, а не в пикселях.
- Функция: frame-outer-width &optional frame
- Функция: frame-outer-height &optional frame
Эти функции возвращают внешнюю ширину и высоту frame в пикселях.
- Функция: frame-native-height &optional frame
- Функция: frame-native-width &optional frame
Эти функции возвращают собственную ширину и высоту frame в пикселях.
- Функция: frame-inner-width &optional frame
- Функция: frame-inner-height &optional frame
Эти функции возвращают внутреннюю ширину и высоту frame в пикселях.
- Функция: frame-text-width &optional frame
- Функция: frame-text-height &optional frame
Эти функции возвращают ширину и высоту текстовой области frame в пикселях.
В оконных системах, которые это поддерживают, Emacs по умолчанию старается сделать так, чтобы размер текстовой области фрейма в пикселях был кратен размеру символа фрейма. Однако обычно это означает, что при перетаскивании внешних границ фрейм можно изменять только с шагом, равным размеру символа. Это также может помешать попыткам полностью развернуть фрейм или сделать его полноэкранным по высоте или ширине (см. Параметры размера), оставляя пустое пространство под фреймом и/или справа от него. В этом случае может помочь следующий параметр.
- Пользовательский параметр: frame-resize-pixelwise
-
Если этот параметр имеет значение
nil(по умолчанию), размер текстовой области фрейма в пикселях обычно округляется до кратного текущим значениямframe-char-heightиframe-char-widthэтого фрейма при каждом изменении его размера. Если значение параметра не равноnil, округление не выполняется, поэтому размер фрейма можно изменять с шагом в один пиксель.Установка этой переменной обычно приводит к тому, что при следующем изменении размера оконному менеджеру передаются соответствующие подсказки о размере. Поэтому эту переменную следует задавать только в начальном файле пользователя; приложениям не следует временно связывать её с каким-либо значением.
Точное значение
nilдля этого параметра зависит от используемого набора инструментов. Перетаскивание внешней границы мышью выполняется с шагом в один символ, если оконный менеджер готов обработать соответствующие подсказки о размере. Однако вызовset-frame-size(см. ниже) с аргументами, задающими размер фрейма, не кратный размеру символа, может быть проигнорирован, привести к округлению (GTK+) или выполнен (Lucid, Motif, MS-Windows).В некоторых оконных менеджерах для полного разворачивания фрейма или перехода в полноэкранный режим может потребоваться установить это значение в не-
nil.
- Функция: set-frame-size frame width height &optional pixelwise
-
Эта функция задаёт размер текстовой области frame, измеряемый в канонических единицах высоты и ширины символа на frame (см. Шрифт фрейма).
Не-
nilдля необязательного аргумента pixelwise означает, что вместо этого новую ширину и высоту следует измерять в пикселях. Обратите внимание: еслиframe-resize-pixelwiseимеет значениеnil, некоторые наборы инструментов могут не выполнить запрос в точности, если он не увеличивает или не уменьшает размер фрейма до значения, кратного размеру символа.
- Функция: set-frame-height frame height &optional pretend pixelwise
-
Эта функция изменяет высоту текстовой области frame до height строк. Размеры существующих окон в frame изменяются пропорционально, чтобы соответствовать новому размеру.
Если pretend не равно
nil, Emacs отображает в frame height строк вывода, но не изменяет значение фактической высоты фрейма. Это полезно только для текстовых терминалов. Задание высоты меньше фактически поддерживаемой терминалом может быть полезно для воспроизведения поведения на экране меньшего размера или если терминал работает со сбоями при использовании всего экрана. Непосредственное задание высоты фрейма не всегда работает, поскольку для правильного позиционирования курсора на текстовых терминалах может потребоваться знать фактический размер.Не-
nilдля необязательного четвёртого аргумента pixelwise означает, что высота frame должна составлять height пикселей. Обратите внимание: еслиframe-resize-pixelwiseимеет значениеnil, некоторые оконные менеджеры могут не выполнить запрос в точности, если он не увеличивает или не уменьшает высоту фрейма до значения, кратного высоте символа.При интерактивном вызове эта команда запрашивает у пользователя количество строк, до которого нужно изменить высоту текущего выбранного фрейма. Это значение также можно задать числовым префиксом.
- Функция: set-frame-width frame width &optional pretend pixelwise
-
Эта функция задаёт ширину текстовой области frame, измеряемую в символах. Аргумент pretend имеет то же значение, что и в
set-frame-height.Не-
nilдля необязательного четвёртого аргумента pixelwise означает, что ширина frame должна составлять width пикселей. Обратите внимание: еслиframe-resize-pixelwiseимеет значениеnil, некоторые оконные менеджеры могут не выполнить запрос полностью, если он не увеличивает или не уменьшает ширину фрейма до значения, кратного ширине символа.При интерактивном вызове эта команда запрашивает у пользователя количество столбцов, до которого нужно изменить ширину текущего выбранного фрейма. Это значение также можно задать числовым префиксом.
Ни одна из этих трёх функций не уменьшит фрейм до размера, при котором его окна вместе с полосами прокрутки, боковыми областями, полями, разделителями, строками режимов и строками заголовков не поместятся в нём. Это отличается от запросов оконного менеджера, например, вызванных перетаскиванием внешней границы фрейма мышью. Такие запросы всегда выполняются, при необходимости обрезая те части, которые не помещаются в правом нижнем углу фрейма. Для получения аналогичного поведения при изменении размера фрейма из Emacs можно использовать параметры min-width и min-height (см. Параметры размера).
Если фрейм находится в полноэкранном режиме (см. Параметры размера), запросы на изменение его размера с помощью одной из этих функций могут быть обработаны или отклонены самим Emacs либо оконным менеджером. Следующая переменная позволяет точнее управлять поведением в таких случаях.
- Пользовательский параметр: alter-fullscreen-frames
-
Этот параметр определяет, как обрабатывать запросы на изменение размеров полноэкранных фреймов. Emacs проверяет его при получении запроса на изменение размера полноэкранного фрейма с помощью таких функций, как
set-frame-size, или при установке параметра фреймаwidthилиheight. Возможны следующие значения:nil-
Запрос на изменение размера будет передан оконному менеджеру, которому будет предоставлено право решать, как его обработать.
t-
Сначала будет сброшен полноэкранный режим, а затем запрос на изменение размера будет передан оконному менеджеру.
inhibitЗапрос на изменение размера будет отклонён, а полноэкранный режим останется без изменений.
По умолчанию используется
inhibitв сборках NS иnilво всех остальных случаях.
- Функция: set-frame-size-and-position &optional frame width height left top
Эта функция за один шаг задаёт новый размер и положение frame; по умолчанию используется выбранный фрейм. Размер и положение задаются так же, как соответствующие параметры фрейма
width,height,leftиtop(см. Параметры размера и Параметры положения). Если какой-либо из этих четырёх аргументов опущен или равенnil, соответствующий параметр frame не изменяется.
- Функция: set-frame-size-and-position-pixelwise frame width height x y &optional gravity
Эта функция задаёт новый размер и положение фрейма аналогично
set-frame-size-and-position, но использует пиксели. Необязательный аргумент gravity задаёт новую гравитацию frame и должен иметь значение от 0 до 10; по умолчанию используется 1. Гравитация зависит от оконной системы и концептуально определяет, какой угол фрейма сохраняет своё положение относительно родительского фрейма при изменении размера этого фрейма или его родителя. (Фреймы верхнего уровня не имеют родительского фрейма; в этом отношении их родителем считается корневое окно оконной системы.) Значение 1 задаёт гравитацию NorthWest и означает, что верхний левый угол фрейма должен сохранять своё относительное положение. Многие оконные менеджеры, по-видимому, игнорируют гравитацию.
Аномальный хук window-size-change-functions (см. Хуки прокрутки окон и изменения их параметров) отслеживает все изменения внутреннего размера фрейма, в том числе вызванные запросами оконной системы или оконного менеджера. Чтобы исключить ложные срабатывания, которые могут возникнуть при изменении только размеров окон фрейма без фактического изменения внутреннего размера фрейма, используйте следующую функцию.
- Функция: frame-size-changed-p &optional frame
Эта функция возвращает не-
nil, если внутренняя ширина или высота frame изменилась с момента последнего вызоваwindow-size-change-functionsдля frame. Сразу после вызоваwindow-size-change-functionsдля frame она всегда возвращает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/Frame-Size.html