29.4 Размеры окон

Emacs предоставляет различные функции для определения высоты и ширины окна. Возвращаемое значение многих из этих функций может быть указано либо в пикселях, либо в единицах строк и столбцов. На графическом дисплее последние фактически соответствуют высоте и ширине символа по умолчанию, указанной шрифтом по умолчанию фрейма, возвращаемой функциями frame-char-height и frame-char-width (см. Шрифт фрейма). Таким образом, если окно отображает текст с другим шрифтом или размером, сообщаемая высота строки и ширина столбца для этого окна может отличаться от фактического количества отображаемых строк или столбцов текста.

Общая высота окна — это количество строк, составляющих его тело и верхнюю и нижнюю рамки (см. Основные понятия окон Emacs).

Функция: window-total-height &optional window round

Эта функция возвращает общую высоту, в строках, окна window. Если window опущен или равен nil, по умолчанию используется выбранное окно. Если window является внутренним окном, возвращаемое значение — общая высота, занимаемая его дочерними окнами.

Если пиксельная высота окна не является целым кратным высоты символа его фрейма, количество строк, занимаемых окном, округляется внутри. Это делается таким образом, чтобы, если окно является родительским окном, сумма общих высот всех его дочерних окон внутри равнялась общей высоте их родителя. Это означает, что, хотя два окна могут иметь одинаковую пиксельную высоту, их внутренние общие высоты могут отличаться на одну строку. Это также означает, что если окно объединено по вертикали и имеет следующего соседа, верхняя строка этого соседа может быть вычислена как сумма верхней строки этого окна и общей высоты (см. Координаты и окна)

Если необязательный аргумент round равен ceiling, эта функция возвращает наименьшее целое число, большее, чем пиксельная высота window поделенная на высоту символа его фрейма; если он равен floor, она возвращает наибольшее целое число, меньшее, чем указанное значение; при любом другом значении round она возвращает внутреннее значение общей высоты windows.

Общая ширина окна — это количество столбцов, составляющих его тело и левую и правую рамки (см. Основные понятия окон Emacs).

Функция: window-total-width &optional window round

Эта функция возвращает общую ширину, в столбцах, окна window. Если window опущен или равен nil, по умолчанию используется выбранное окно. Если window является внутренним, возвращаемое значение — общая ширина, занимаемая его дочерними окнами.

Если пиксельная ширина окна не является целым кратным ширины символа его фрейма, количество столбцов, занимаемых окном, округляется внутри. Это делается таким образом, чтобы, если окно является родительским окном, сумма общих ширин всех его дочерних окон внутри равнялась общей ширине их родителя. Это означает, что, хотя два окна могут иметь одинаковую пиксельную ширину, их внутренние общие ширины могут отличаться на один столбец. Это также означает, что если это окно объединено по горизонтали и имеет следующего соседа, левый столбец этого соседа может быть вычислен как сумма левого столбца этого окна и общей ширины (см. Координаты и окна). Необязательный аргумент round ведет себя так же, как и для window-total-height.

Функция: window-total-size &optional window horizontal round

Эта функция возвращает либо общую высоту в строках, либо общую ширину в столбцах окна window. Если horizontal опущен или равен nil, это эквивалентно вызову window-total-height для window; в противном случае это эквивалентно вызову window-total-width для window. Необязательный аргумент round ведет себя так же, как и для window-total-height.

Следующие две функции могут быть использованы для возврата общей размерности окна в пикселях.

Функция: window-pixel-height &optional window

Эта функция возвращает общую высоту окна window в пикселях. window должен быть действительным окном и по умолчанию используется выбранное.

Возвращаемое значение включает высоты верхних и нижних рамок window. Если window является внутренним окном, его пиксельная высота — это пиксельная высота экранных областей, занимаемых его дочерними окнами.

Функция: window-pixel-width &optional window

Эта функция возвращает ширину окна window в пикселях. window должен быть действительным окном и по умолчанию используется выбранное.

Возвращаемое значение включает ширины левой и правой рамок window. Если window является внутренним окном, его пиксельная ширина — это ширина экранных областей, занимаемых его дочерними окнами.

Следующие функции могут быть использованы для определения, есть ли у данного окна соседние окна.

Функция: window-full-height-p &optional window

Эта функция возвращает не-nil, если у window нет других окон над или под ним в его фрейме. Точнее, это означает, что общая высота window равна общей высоте корневого окна на этом фрейме. Окно minibuffer не учитывается в этом отношении. Если window опущен или равен nil, по умолчанию используется выбранное окно.

Функция: window-full-width-p &optional window

Эта функция возвращает не-nil, если у window нет других окон слева или справа в его фрейме, то есть его общая ширина равна ширине корневого окна на этом фрейме. Если window опущен или равен nil, по умолчанию используется выбранное окно.

Высота тела окна — это высота его тела, которая не включает ни одну из его верхней или нижней рамок (см. Основные понятия окон Emacs).

Функция: window-body-height &optional window pixelwise

Эта функция возвращает высоту, в строках, тела окна window. Если window опущен или равен nil, по умолчанию используется выбранное окно; в противном случае это должно быть активное окно.

Необязательный аргумент pixelwise определяет единицы, используемые для высоты. Если он равен nil, возвращается высота тела window в символах, округленная до ближайшего целого, если необходимо. Это означает, что если строка в нижней части области текста видна только частично, она не учитывается. Это также означает, что высота тела окна никогда не может превышать его общую высоту, возвращаемую window-total-height.

Если pixelwise равен remap, а шрифт по умолчанию переназначен (см. Переназначение шрифта), используйте переназначенный шрифт для определения высоты символа. Для любого другого не-nil значения возвращается высота в пикселях.

Ширина тела окна — это ширина его тела и области текста, которая не включает ни одну из его левой или правой рамок (см. Основные понятия окон Emacs).

Обратите внимание, что когда одна или обе рамки удалены (установив их ширину в ноль), движок отображения резервирует две ячейки символов, по одной с каждой стороны окна, для отображения глифов продолжения и обрезания, что уменьшает количество столбцов для отображения текста на 2. (Функция window-max-chars-per-line, описанная ниже, учитывает эту особенность.)

Функция: window-body-width &optional window pixelwise

Эта функция возвращает ширину, в столбцах, тела окна window. Если window опущен или равен nil, по умолчанию используется выбранное окно; в противном случае это должно быть активное окно.

Необязательный аргумент pixelwise определяет единицы, используемые для ширины. Если он равен nil, возвращается ширина тела window в символах, округленная до ближайшего целого, если необходимо. Это означает, что если столбец справа от области текста виден только частично, он не учитывается. Это также означает, что ширина тела окна никогда не может превышать его общую ширину, возвращаемую window-total-width.

Если pixelwise равен remap, а шрифт по умолчанию переназначен (см. Переназначение шрифта), используйте переназначенный шрифт для определения ширины символа. Для любого другого не-nil значения возвращается ширина в пикселях.

Функция: window-body-size &optional window horizontal pixelwise

Эта функция возвращает высоту тела или ширину тела window. Если horizontal опущен или равен nil, это эквивалентно вызову window-body-height для window; в противном случае это эквивалентно вызову window-body-width. В любом случае необязательный аргумент pixelwise передается в вызываемую функцию.

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

Функция: window-mode-line-height &optional window

Эта функция возвращает высоту в пикселях строки режима window. window должен быть активным окном и по умолчанию используется выбранное. Если у window нет строки режима, возвращаемое значение равно нулю.

Функция: window-tab-line-height &optional window

Эта функция возвращает высоту в пикселях строки вкладки window. window должен быть активным окном и по умолчанию используется выбранное. Если у window нет строки вкладки, возвращаемое значение равно нулю.

Функция: window-header-line-height &optional window

Эта функция возвращает высоту в пикселях строки заголовка window. window должен быть активным окном и по умолчанию используется выбранное. Если у window нет строки заголовка, возвращаемое значение равно нулю.

Функции для получения высоты и/или ширины разделителей окон (см. Разделители окон), рамок (см. Рамки), полос прокрутки (см. Полосы прокрутки) и полей отображения (см. Отображение в полях) описаны в соответствующих разделах.

Если ваша программа на Lisp должна принимать решения о макетировании, вам может быть полезна следующая функция:

Функция: window-max-chars-per-line &optional window face

Эта функция возвращает количество символов, отображаемых в указанном шрифте 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-min-height, window-min-width и window-size-fixed (см. Сохранение размеров окон).

Функция: window-min-size &optional window horizontal ignore pixelwise

Эта функция возвращает минимальный размер 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 в пикселях.