Каноническим способом задания размера фрейма из Emacs является задание его текстового размера — кортежа из ширины и высоты текстовой области фрейма (см. Расположение фрейма). Он может измеряться как в пикселях, так и в единицах канонического размера символа фрейма (см. Шрифт фрейма).
Для фреймов с внутренним меню или панелью инструментов собственная
высота фрейма не может быть точно определена до тех пор, пока фрейм не будет
фактически отображён. Это означает, что в общем случае вы не можете использовать
собственный размер для указания начального размера фрейма. Как только вы узнаете
собственный размер видимого фрейма, вы можете вычислить его внешний размер (см. Расположение фрейма),
прибавив оставшиеся компоненты из возвращаемого значения
frame-geometry. Однако для невидимых фреймов или для фреймов, которые
ещё предстоит создать, внешний размер можно лишь оценить. Это
также означает, что вычисление точного начального положения фрейма,
заданного через смещения от правого или нижнего края экрана
(см. Положение фрейма), невозможно.
Текстовый размер любого фрейма можно установить и получить с помощью
параметров фрейма height и width (см. Параметры размера). Текстовый размер начального фрейма также можно задать с
помощью спецификации геометрии в стиле X. См. Аргументы командной строки для вызова Emacs в Руководство по GNU Emacs. Ниже мы перечисляем некоторые функции для доступа и установки размера
существующего видимого фрейма (по умолчанию выбранного).
Эти функции возвращают высоту и ширину текстовой области
frame, измеренные в единицах высоты и ширины шрифта по умолчанию для
frame (см. Шрифт фрейма). Эти функции являются просто сокращениями
для записи (frame-parameter frame 'height) и
(frame-parameter frame 'width).
Если текстовая область frame, измеренная в пикселях, не кратна размеру шрифта по умолчанию, значения, возвращаемые этими функциями, округляются вниз до количества символов шрифта по умолчанию, которые полностью помещаются в текстовую область.
Следующие функции возвращают ширину и высоту в пикселях для собственного, внешнего и внутреннего фрейма, а также текстовой области (см. Расположение фрейма) заданного фрейма. Для текстового терминала результаты выдаются в символах, а не в пикселях.
Эти функции возвращают внешнюю ширину и высоту frame в пикселях.
Эти функции возвращают собственную ширину и высоту frame в пикселях.
Эти функции возвращают внутреннюю ширину и высоту frame в пикселях.
Эти функции возвращают ширину и высоту текстовой области frame в пикселях.
В оконных системах, которые это поддерживают, Emacs по умолчанию старается, чтобы текстовый размер фрейма, измеренный в пикселях, был кратен размеру символа фрейма. Однако это обычно означает, что фрейм можно изменять только с шагом в размер символа при перетаскивании его внешних границ. Это также может нарушать попытки действительно развернуть фрейм или сделать его «полной высоты» или «полной ширины» (см. Параметры размера), оставляя некоторое пустое пространство снизу и/или справа от фрейма. В этом случае может помочь следующая опция.
Если эта опция равна nil (значение по умолчанию), пиксельный размер текста фрейма
обычно округляется до кратного текущим значениям
frame-char-height и frame-char-width этого фрейма при каждом
изменении размера фрейма. Если она не равна nil, округление не выполняется, следовательно,
размеры фрейма могут увеличиваться/уменьшаться на один пиксель.
Установка этой переменной обычно приводит к тому, что следующая операция изменения размера передаёт соответствующие подсказки о размере оконному менеджеру. Это означает, что эту переменную следует устанавливать только в начальном файле пользователя; приложения никогда не должны временно её привязывать.
Точное значение значения nil для этой опции зависит от
используемого набора инструментов. Перетаскивание внешней границы с помощью мыши
выполняется посимвольно, если оконный менеджер готов обрабатывать
соответствующие подсказки о размере. Вызов set-frame-size (см. ниже)
с аргументами, которые не задают размер фрейма как целое число, кратное
размеру его символа, однако, может: быть проигнорирован, вызвать округление
(GTK+) или быть принят (Lucid, Motif, MS-Windows).
В некоторых оконных менеджерах вам, возможно, придётся установить это значение не равным nil,
чтобы фрейм действительно выглядел развёрнутым или полноэкранным.
Эта функция устанавливает размер текстовой области frame, измеренный в единицах канонической высоты и ширины символа на frame (см. Шрифт фрейма).
Необязательный аргумент pixelwise не равный nil означает измерять
новую ширину и высоту в пикселях. Обратите внимание, что если
frame-resize-pixelwise равен nil, некоторые наборы инструментов могут отказаться
действительно выполнить запрос, если он не увеличивает/уменьшает
размер фрейма до величины, кратной размеру его символа.
Эта функция изменяет размер текстовой области frame до высоты в height строк. Размеры существующих окон в frame изменяются пропорционально, чтобы соответствовать.
Если pretend не равен nil, то Emacs отображает height
строк вывода в frame, но не изменяет значение для
фактической высоты фрейма. Это полезно только на текстовых терминалах.
Использование высоты меньше, чем фактически реализует терминал, может быть
полезно для воспроизведения поведения, наблюдаемого на меньшем экране, или если
терминал работает некорректно при использовании всего экрана. Установка
высоты фрейма напрямую не всегда работает, поскольку знание правильного
фактического размера может быть необходимо для правильного позиционирования курсора на
текстовых терминалах.
Необязательный четвёртый аргумент pixelwise не равный nil означает, что
frame должен иметь высоту height пикселей. Обратите внимание, что если
frame-resize-pixelwise равен nil, некоторые оконные менеджеры могут
отказаться действительно выполнить запрос, если он не увеличивает/уменьшает
высоту фрейма до величины, кратной высоте его символа.
При интерактивном использовании эта команда запросит у пользователя количество строк для установки высоты текущего выбранного фрейма. Вы также можете указать это значение с помощью числового префикса.
Эта функция устанавливает ширину текстовой области frame, измеренную
в символах. Аргумент pretend имеет тот же смысл, что и в
set-frame-height.
Необязательный четвёртый аргумент pixelwise не равный nil означает, что
frame должен иметь ширину width пикселей. Обратите внимание, что если
frame-resize-pixelwise равен nil, некоторые оконные менеджеры могут
отказаться полностью выполнить запрос, если он не увеличивает/уменьшает
ширину фрейма до величины, кратной ширине его символа.
При интерактивном использовании эта команда запросит у пользователя количество столбцов для установки ширины текущего выбранного фрейма. Вы также можете указать это значение с помощью числового префикса.
Ни одна из этих трёх функций не сделает фрейм меньше, чем необходимо для
отображения всех его окон вместе с их полосами прокрутки, полями,
отступами, разделителями, строкой режима и строкой заголовка.
Это контрастирует с запросами от оконного менеджера, инициированными,
например, перетаскиванием внешней границы фрейма с помощью мыши.
Такие запросы всегда выполняются путём обрезания, если необходимо, частей,
которые не могут быть отображены в правом нижнем углу фрейма.
Параметры min-width и min-height (см. Параметры размера) можно использовать для получения
аналогичного поведения при изменении размера фрейма из Emacs.
Аномальный хук window-size-change-functions (см. Хуки для прокрутки окон и изменений) отслеживает все изменения внутреннего размера фрейма, включая те,
которые вызваны запросом оконной системы или оконного менеджера. Чтобы исключить
ложные срабатывания, которые могут возникнуть при изменении только размеров
окон фрейма без фактического изменения размера внутреннего фрейма,
используйте следующую функцию.
Эта функция возвращает не nil, если внутренняя ширина или высота
frame изменились с момента последнего выполнения window-size-change-functions
для frame. Она всегда возвращает nil
сразу после выполнения window-size-change-functions для
frame.