Emacs предоставляет различные функции для определения высоты и ширины
окна. Возвращаемое значение многих из этих функций может быть указано
либо в пикселях, либо в единицах строк и столбцов. На графическом дисплее
последние фактически соответствуют высоте и ширине символа по умолчанию,
указанной шрифтом по умолчанию фрейма, возвращаемой функциями
frame-char-height и frame-char-width (см.
Шрифт фрейма). Таким образом, если окно
отображает текст с другим шрифтом или размером, сообщаемая высота строки
и ширина столбца для этого окна может отличаться от фактического количества
отображаемых строк или столбцов текста.
Общая высота окна — это количество строк, составляющих его тело и верхнюю и нижнюю рамки (см. Основные понятия окон Emacs).
Эта функция возвращает общую высоту, в строках, окна
window. Если window опущен или равен
nil, по умолчанию используется выбранное окно. Если
window является внутренним окном, возвращаемое значение —
общая высота, занимаемая его дочерними окнами.
Если пиксельная высота окна не является целым кратным высоты символа его фрейма, количество строк, занимаемых окном, округляется внутри. Это делается таким образом, чтобы, если окно является родительским окном, сумма общих высот всех его дочерних окон внутри равнялась общей высоте их родителя. Это означает, что, хотя два окна могут иметь одинаковую пиксельную высоту, их внутренние общие высоты могут отличаться на одну строку. Это также означает, что если окно объединено по вертикали и имеет следующего соседа, верхняя строка этого соседа может быть вычислена как сумма верхней строки этого окна и общей высоты (см. Координаты и окна)
Если необязательный аргумент round равен ceiling,
эта функция возвращает наименьшее целое число, большее, чем пиксельная
высота window поделенная на высоту символа его фрейма; если
он равен floor, она возвращает наибольшее целое число,
меньшее, чем указанное значение; при любом другом значении round
она возвращает внутреннее значение общей высоты windows.
Общая ширина окна — это количество столбцов, составляющих его тело и левую и правую рамки (см. Основные понятия окон Emacs).
Эта функция возвращает общую ширину, в столбцах, окна
window. Если window опущен или равен
nil, по умолчанию используется выбранное окно. Если
window является внутренним, возвращаемое значение —
общая ширина, занимаемая его дочерними окнами.
Если пиксельная ширина окна не является целым кратным ширины символа
его фрейма, количество столбцов, занимаемых окном, округляется внутри. Это
делается таким образом, чтобы, если окно является родительским окном,
сумма общих ширин всех его дочерних окон внутри равнялась общей
ширине их родителя. Это означает, что, хотя два окна могут иметь одинаковую
пиксельную ширину, их внутренние общие ширины могут отличаться на один
столбец. Это также означает, что если это окно объединено по горизонтали и
имеет следующего соседа, левый столбец этого соседа может быть
вычислен как сумма левого столбца этого окна и общей ширины (см.
Координаты и окна).
Необязательный аргумент round ведет себя так же, как и
для window-total-height.
Эта функция возвращает либо общую высоту в строках, либо общую
ширину в столбцах окна window. Если horizontal
опущен или равен nil, это эквивалентно вызову
window-total-height для window; в противном
случае это эквивалентно вызову window-total-width для
window. Необязательный аргумент round ведет
себя так же, как и для window-total-height.
Следующие две функции могут быть использованы для возврата общей размерности окна в пикселях.
Эта функция возвращает общую высоту окна window в пикселях. window должен быть действительным окном и по умолчанию используется выбранное.
Возвращаемое значение включает высоты верхних и нижних рамок window. Если window является внутренним окном, его пиксельная высота — это пиксельная высота экранных областей, занимаемых его дочерними окнами.
Эта функция возвращает ширину окна window в пикселях. window должен быть действительным окном и по умолчанию используется выбранное.
Возвращаемое значение включает ширины левой и правой рамок window. Если window является внутренним окном, его пиксельная ширина — это ширина экранных областей, занимаемых его дочерними окнами.
Следующие функции могут быть использованы для определения, есть ли у данного окна соседние окна.
Эта функция возвращает не-nil, если у
window нет других окон над или под ним в его фрейме. Точнее,
это означает, что общая высота window равна общей высоте
корневого окна на этом фрейме. Окно minibuffer не учитывается в этом
отношении. Если window опущен или равен nil,
по умолчанию используется выбранное окно.
Эта функция возвращает не-nil, если у
window нет других окон слева или справа в его фрейме, то есть
его общая ширина равна ширине корневого окна на этом фрейме. Если
window опущен или равен nil, по умолчанию
используется выбранное окно.
Высота тела окна — это высота его тела, которая не включает ни одну из его верхней или нижней рамок (см. Основные понятия окон Emacs).
Эта функция возвращает высоту, в строках, тела окна
window. Если window опущен или равен
nil, по умолчанию используется выбранное окно; в противном
случае это должно быть активное окно.
Необязательный аргумент pixelwise определяет единицы,
используемые для высоты. Если он равен nil, возвращается
высота тела window в символах, округленная до ближайшего
целого, если необходимо. Это означает, что если строка в нижней части
области текста видна только частично, она не учитывается. Это также
означает, что высота тела окна никогда не может превышать его общую
высоту, возвращаемую window-total-height.
Если pixelwise равен remap, а
шрифт по умолчанию переназначен (см. Переназначение
шрифта), используйте переназначенный шрифт для определения высоты
символа. Для любого другого не-nil значения
возвращается высота в пикселях.
Ширина тела окна — это ширина его тела и области текста, которая не включает ни одну из его левой или правой рамок (см. Основные понятия окон Emacs).
Обратите внимание, что когда одна или обе рамки удалены (установив их
ширину в ноль), движок отображения резервирует две ячейки символов, по
одной с каждой стороны окна, для отображения глифов продолжения и
обрезания, что уменьшает количество столбцов для отображения текста на 2.
(Функция window-max-chars-per-line, описанная ниже,
учитывает эту особенность.)
Эта функция возвращает ширину, в столбцах, тела окна
window. Если window опущен или равен
nil, по умолчанию используется выбранное окно; в противном
случае это должно быть активное окно.
Необязательный аргумент pixelwise определяет единицы,
используемые для ширины. Если он равен nil, возвращается
ширина тела window в символах, округленная до ближайшего
целого, если необходимо. Это означает, что если столбец справа от области
текста виден только частично, он не учитывается. Это также означает, что
ширина тела окна никогда не может превышать его общую ширину, возвращаемую
window-total-width.
Если pixelwise равен remap, а
шрифт по умолчанию переназначен (см. Переназначение
шрифта), используйте переназначенный шрифт для определения ширины
символа. Для любого другого не-nil значения
возвращается ширина в пикселях.
Эта функция возвращает высоту тела или ширину тела window.
Если horizontal опущен или равен nil, это
эквивалентно вызову window-body-height для window;
в противном случае это эквивалентно вызову window-body-width.
В любом случае необязательный аргумент pixelwise передается в
вызываемую функцию.
Пиксельные высоты режима, вкладки и заголовка окна могут быть получены с помощью приведенных ниже функций. Их возвращаемое значение обычно точно, если окно отображалось ранее: в противном случае возвращаемое значение основано на оценке шрифта, используемого для фрейма окна.
Эта функция возвращает высоту в пикселях строки режима window. window должен быть активным окном и по умолчанию используется выбранное. Если у window нет строки режима, возвращаемое значение равно нулю.
Эта функция возвращает высоту в пикселях строки вкладки window. window должен быть активным окном и по умолчанию используется выбранное. Если у window нет строки вкладки, возвращаемое значение равно нулю.
Эта функция возвращает высоту в пикселях строки заголовка window. window должен быть активным окном и по умолчанию используется выбранное. Если у window нет строки заголовка, возвращаемое значение равно нулю.
Функции для получения высоты и/или ширины разделителей окон (см. Разделители окон), рамок (см. Рамки), полос прокрутки (см. Полосы прокрутки) и полей отображения (см. Отображение в полях) описаны в соответствующих разделах.
Если ваша программа на Lisp должна принимать решения о макетировании, вам может быть полезна следующая функция:
Эта функция возвращает количество символов, отображаемых в
указанном шрифте face в указанном окне window
(которое должно быть активным окном). Если face был
переназначен (см. Переназначение
шрифта), возвращается информация для переназначенного шрифта. Если
он опущен или равен nil, face по
умолчанию устанавливается в шрифт по умолчанию, а window
по умолчанию устанавливается в выбранное окно.
В отличие от window-body-width, эта функция учитывает
фактический размер шрифта face, а не работает в единицах
канонической ширины символа фрейма window (см.
Шрифт фрейма). Она также учитывает
пространство, занимаемое глифом продолжения, если у window
отсутствуют одна или обе рамки.
Команды, изменяющие размер окон (см. Изменение
размера окон) или разделяющие их (см. Разделение
окон), подчиняются переменным
window-min-height и window-min-width, которые
указывают минимально допустимую высоту и ширину окна. Они также подчиняются
переменной
window-size-fixed, с помощью которой окно может быть
зафиксировано по размеру (см. Сохранение
размеров окон).
Эта опция указывает минимальную общую высоту, в строках, любого окна. Ее значение должно вмещать как минимум одну строку текста и любые верхние или нижние рамки.
Эта опция указывает минимальную общую ширину, в столбцах, любого окна. Ее значение должно вмещать как минимум два столбца текста и любые левые или правые рамки.
Следующая функция сообщает, насколько маленьким может стать конкретное окно,
принимая во внимание размеры его областей и значения
window-min-height, window-min-width и
window-size-fixed (см. Сохранение
размеров окон).
Эта функция возвращает минимальный размер window.
window должен быть действительным окном и по умолчанию
используется выбранное. Необязательный аргумент horizontal
не равен nil означает возврат минимального количества
столбцов window; в противном случае возвращается минимальное
количество строк window.
Возвращаемое значение гарантирует, что все компоненты window
останутся полностью видимыми, если размер window фактически
будет установлен на этот. При horizontal nil
включаются любые верхние или нижние рамки. При horizontal
не равен nil включаются любые левые или правые рамки
window.
Необязательный аргумент ignore, если он не равен nil, означает игнорирование ограничений, наложенных окнами
фиксированного размера, настройками window-min-height или
window-min-width. Если ignore равно
safe, активные окна могут стать такими маленькими, как
window-safe-min-height строк и window-safe-min-width
столбцов. Если ignore — это окно, игнорируются
ограничения только для этого окна. Любое другое не-nil
значение означает игнорирование всех вышеуказанных ограничений для всех
окон.
Необязательный аргумент pixelwise не равен nil означает возврат минимального размера window
в пикселях.