Размер фрейма
Канонический способ указать размер фрейма внутри 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 (см. Шрифт фрейма).
Необязательный аргумент pixelwise не равный
nilозначает, что новую ширину и высоту следует измерять в пикселях. Обратите внимание, что еслиframe-resize-pixelwiseравноnil, некоторые инструментарии могут отказаться полностью выполнить запрос, если это не увеличит/уменьшит размер фрейма до кратного размеру символа.
- Функция: set-frame-height frame height &optional pretend pixelwise
-
Эта функция изменяет высоту области текста frame на height строк. Размеры существующих окон в frame изменяются пропорционально, чтобы поместиться.
Если pretend не равно
nil, то Emacs отображает height строк вывода в frame, но не изменяет его значение для фактической высоты фрейма. Это полезно только в текстовых терминалах. Использование меньшей высоты, чем фактически реализует терминал, может быть полезно для воспроизведения поведения на меньшем экране или если терминал дает сбой при использовании всего экрана. Прямое задание высоты фрейма не всегда работает, потому что знание правильного фактического размера может быть необходимым для правильного позиционирования курсора в текстовых терминалах.Необязательный четвертый аргумент pixelwise не равный
nilозначает, что frame должен иметь высоту height пикселей. Обратите внимание, что еслиframe-resize-pixelwiseравноnil, некоторые менеджеры окон могут отказаться полностью выполнить запрос, если это не увеличит/уменьшит высоту фрейма до кратного высоте символа.При интерактивном использовании эта команда попросит пользователя ввести число строк для установки высоты текущего выбранного фрейма. Вы также можете указать это значение с помощью числового префикса.
- Функция: set-frame-width frame width &optional pretend pixelwise
-
Эта функция устанавливает ширину области текста frame, измеренную в символах. Аргумент pretend имеет то же значение, что и в
set-frame-height.Необязательный четвертый аргумент pixelwise не равный
nilозначает, что frame должен иметь ширину width пикселей. Обратите внимание, что еслиframe-resize-pixelwiseравноnil, некоторые менеджеры окон могут отказаться полностью выполнить запрос, если это не увеличит/уменьшит ширину фрейма до кратного ширине символа.При интерактивном использовании эта команда попросит пользователя ввести количество столбцов для установки ширины текущего выбранного фрейма. Вы также можете указать это значение с помощью числового префикса.
Ни одна из этих трех функций не сделает фрейм меньше, чем необходимо для отображения всех его окон вместе со скроллбарами, обрамлениями, полями, разделителями, линиями режима и заголовка. Это отличается от запросов менеджера окон, например, при перетаскивании внешней границы фрейма мышкой. Такие запросы всегда удовлетворяются обрезкой, если необходимо, частей, которые не могут быть отображены в правом нижнем углу фрейма. Параметры min-width и min-height (см. Параметры размера) могут быть использованы для получения аналогичного поведения при изменении размера фрейма внутри Emacs.
Нестандартный хук window-size-change-functions (см. Хук окон) отслеживает все изменения внутреннего размера фрейма, включая те, которые вызваны запросом системного окна или менеджера окон. Чтобы исключить ложные срабатывания, которые могут произойти при изменении только размеров окон фрейма без фактического изменения размера внутреннего фрейма, используйте следующую функцию.
- Функция: frame-size-changed-p &optional frame
Эта функция возвращает не-
nilкогда внутренняя ширина или высота frame изменились с момента последнего запускаwindow-size-change-functionsдля frame. Она всегда возвращаетnilсразу после запускаwindow-size-change-functionsдля frame.
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/Frame-Size.html