Размер отображаемого текста
Поскольку не все символы имеют одинаковую ширину, эти функции позволяют проверить ширину символа. См. Примитивное отступ и Строки экрана для связанных функций.
- Функция: char-width char
Эта функция возвращает ширину в столбцах символа char, если бы он был отображен в текущем буфере (т.е., учитывая таблицу отображения буфера, если таковая имеется; см. Таблицы отображения). Ширина символа табуляции обычно
tab-width(см. Обычное отображение).
- Функция: string-width string &optional from to
-
Эта функция возвращает ширину в столбцах строки string, если бы она была отображена в текущем буфере и выбранном окне. Необязательные аргументы from и to задают подстроку string, которую следует учитывать, и интерпретируются как в
substring(см. Создание строк).Возвращаемое значение является приблизительным: оно учитывает только значения, возвращаемые
char-widthдля составляющих символов, всегда считает символ табуляции занимающимtab-widthстолбцов, игнорирует свойства отображения и шрифты и т. д. По этим причинам мы рекомендуем использоватьwindow-text-pixel-size, описанную ниже, вместо этого.
- Функция: truncate-string-to-width string width &optional start-column padding ellipsis ellipsis-text-property
-
Эта функция возвращает новую строку, являющуюся усеченной версией string, которая помещается в пределах width столбцов на экране.
Если string уже меньше width, результат равен string; в противном случае лишние символы опускаются из результата. Если многоколоночный символ в string превышает целевое значение width, этот символ опускается из результата. Таким образом, результат может иногда быть меньше width, но не может превышать его.
Необязательный аргумент start-column задаёт начальный столбец; по умолчанию он равен нулю. Если он не
nil, то первые start-column столбцов строки опускаются из результата. Если какой-либо многоколоночный символ в string распространяется на столбец start-column, этот символ опускается.Необязательный аргумент padding, если он не
nil, является символом заполнения, добавляемым в начало и конец результирующей строки, чтобы расширить её до ровно width столбцов. Символ заполнения добавляется в конец результата, если он короче width, столько раз, сколько необходимо, чтобы достичь width. Он также добавляется в начало результата, если какой-либо многоколоночный символ в string распространяется на столбец start-column.Если ellipsis не
nil, это должна быть строка, которая заменит конец string при его усечении. В этом случае из string будет удалено больше символов, чтобы освободить достаточно места для размещения ellipsis в пределах width столбцов. Однако, если ширина string на экране меньше ширины ellipsis на экране, ellipsis не будет добавлен в результат. Если ellipsis неnilи не является строкой, он обозначает значение, возвращаемое функциейtruncate-string-ellipsis, описанной ниже.Необязательный аргумент ellipsis-text-property, если он не
nil, означает скрыть лишние части string с помощью свойства текстаdisplay(см. Свойство отображения), отображающего многоточие, вместо фактического усечения строки.(truncate-string-to-width "\tab\t" 12 4) ⇒ "ab" (truncate-string-to-width "\tab\t" 12 4 ?\s) ⇒ " ab "Эта функция использует
string-widthиchar-widthдля поиска подходящей точки усечения, когда string слишком широк, поэтому она страдает теми же основными проблемами, что иstring-width. В частности, когда композиция символов происходит внутри string, ширина строки на экране может быть меньше суммы ширин составляющих символов, и эта функция может возвращать неточные результаты.
- Функция: truncate-string-ellipsis
Эта функция возвращает строку, используемую в качестве многоточия в
truncate-string-to-widthи других аналогичных контекстах. Значение — это значение переменнойtruncate-string-ellipsis, если оно неnil, строка с одиночным символом U+2026 ГОРИЗОНТАЛЬНОЕ МНОГОТОЧИЕ, если этот символ может быть отображен на выбранном фрейме, и строка ‘...’ в противном случае.
Следующая функция возвращает размер текста в пикселях, как если бы он был отображен в данном окне. Эта функция используется fit-window-to-buffer и fit-frame-to-buffer (см. Изменение размеров окон) для того, чтобы сделать окно ровно таким же большим, как текст, который оно содержит.
- Функция: window-text-pixel-size &optional window from to x-limit y-limit mode-lines
-
Эта функция возвращает размер текста буфера window в пикселях. window должен быть активным окном и по умолчанию является выбранным. Возвращаемое значение — конс максимальной ширины в пикселях любой строки текста и максимальной высоты в пикселях всех строк текста. Эта функция нужна для того, чтобы программы на языке Lisp могли изменять размеры window в соответствии с текстом буфера, который необходимо отобразить.
Необязательный аргумент from, если он не
nil, задаёт первую позицию текста для рассмотрения и по умолчанию соответствует минимально доступной позиции буфера. Если fromt, он обозначает минимально доступную позицию, которая не является символом перевода строки. Необязательный аргумент to, если он неnil, задаёт последнюю позицию текста для рассмотрения и по умолчанию соответствует максимально доступной позиции буфера. Если tot, он обозначает максимально доступную позицию, которая не является символом перевода строки.Необязательный аргумент x-limit, если он не
nil, задаёт максимальную координату X, за пределами которой текст следует игнорировать; следовательно, это также максимальное значение ширины в пикселях, которое может вернуть функция. Если x-limitnilили опущен, это означает использование ширины в пикселях тела window (см. Размеры окна); этот по умолчанию означает, что текст усеченных строк, шире окна, будет проигнорирован. Этот по умолчанию полезен, когда вызывающая сторона не собирается изменять ширину window. В противном случае вызывающая сторона должна указать здесь максимальную ширину, которую может принять тело window; в частности, если ожидаются усеченные строки и их текст необходимо учесть, x-limit следует установить на большое значение. Поскольку вычисление ширины длинных строк может занять некоторое время, всегда полезно сделать этот аргумент так маленьким, как это необходимо; в частности, если буфер может содержать длинные строки, которые будут усечены в любом случае.Необязательный аргумент y-limit, если он не
nil, задаёт максимальную координату Y, за пределами которой текст следует игнорировать; следовательно, это также максимальная высота в пикселях, которую может вернуть функция. Если y-limit равен nil или опущен, это означает, что учитываются все строки текста до позиции буфера, указанной to. Поскольку вычисление высоты большого буфера может занять некоторое время, имеет смысл указать этот аргумент; в частности, если вызывающая сторона не знает размер буфера.Необязательный аргумент mode-lines
nilили опущен, означает, что не следует включать высоту строки режима, табуляции или заголовка window в возвращаемое значение. Если это символmode-line,tab-lineилиheader-line, включайте только высоту этой строки, если она присутствует, в возвращаемое значение. Если этоt, включайте высоту всех этих строк, если они присутствуют, в возвращаемое значение.
window-text-pixel-size рассматривает отображаемый в окне текст как единое целое и не заботится о размере отдельных строк. Следующая функция — нет.
- Функция: window-lines-pixel-dimensions &optional window first last body inverse left
-
Эта функция вычисляет пиксельные размеры каждой строки, отображаемой в указанном окне window. Для этого она проходит по текущей матрице глифов окна window — матрице, хранящей глифы (см. Глифы) каждого символа буфера, текущего отображаемого в window. При успешном выполнении она возвращает список пар конс, представляющих координаты нижнего правого угла последнего символа каждой строки. Координаты измеряются в пикселях от начала координат (0, 0) в верхнем левом углу окна window. window должен быть активным окном, и по умолчанию он выбран.
Если необязательный аргумент first является целым числом, он обозначает индекс (начиная с 0) первой строки матрицы глифов окна window, которая должна быть возвращена. Обратите внимание, что если у window есть заголовочная строка, строка с индексом 0 — это заголовочная строка. Если first является
nil, первая строка для рассмотрения определяется значением необязательного аргумента body: Если body неnil, это означает, что нужно начинать с первой строки тела окна window, пропуская заголовочную строку, если она есть. В противном случае функция начнёт с первой строки матрицы глифов window, возможно, с заголовочной строки.Если необязательный аргумент last является целым числом, он обозначает индекс последней строки матрицы глифов window, которая должна быть возвращена. Если last является
nil, последняя строка для рассмотрения определяется значением body: Если body неnil, это означает использование последней строки тела окна window, опуская строку режима окна, если она присутствует. В противном случае это означает использование последней строки окна, которая может быть строкой режима.Необязательный аргумент inverse, если
nil, означает, что значение y-координаты, возвращаемое для любой строки, указывает расстояние в пикселях от левого края (края тела, если body неnil) окна window до правого края последнего глифа этой строки. inverse неnilозначает, что значение y-координаты, возвращаемое для любой строки, указывает расстояние в пикселях от правого края последнего глифа этой строки до правого края (края тела, если body неnil) окна window. Это полезно для определения количества свободного места в конце каждой строки.Необязательный аргумент left, если не
nil, означает, что возвращаются x- и y-координаты нижнего левого угла левого символа на каждой строке. Это значение следует использовать для окон, в которых текст отображается преимущественно справа налево.Если left не
nilи inverse —nil, это означает, что значение y-координаты, возвращаемое для любой строки, указывает расстояние в пикселях от левого края последнего (самого левого) глифа этой строки до правого края (края тела, если body неnil) окна window. Если left и inverse оба неnil, значение y-координаты, возвращаемое для любой строки, указывает расстояние в пикселях от левого края (края тела, если body неnil) окна window до левого края последнего (самого левого) глифа этой строки.Эта функция возвращает
nilесли текущая матрица глифов окна window не обновлена, что обычно происходит, когда Emacs занят, например, при обработке команды. Однако значение должно быть доступно, когда эта функция запускается из таймера бездействия с задержкой в ноль секунд.
- Функция: line-pixel-height
Эта функция возвращает высоту в пикселях строки в точке в выбранном окне. Значение включает межстрочный интервал строки (см. Высота строки).
Когда буфер отображается с номерами строк (см. Display Custom в руководстве GNU Emacs), иногда полезно знать ширину, занимаемую для отображения номеров строк. Следующая функция предназначена для программ на Lisp, которым требуется эта информация для вычислений макета.
- Функция: line-number-display-width &optional pixelwise
Эта функция возвращает ширину, используемую для отображения номеров строк в выбранном окне. Если необязательный аргумент pixelwise — символ
columns, возвращаемое значение — число с плавающей точкой, представляющее канонические столбцы кадра; если pixelwise —tили любое другое неnilзначение, значение является целым числом и измеряется в пикселях. Если pixelwise опущен илиnil, значение — это целое число столбцов шрифта, определённого дляline-numberвида шрифта, и не включает 2 столбца, используемые для выравнивания номеров при отображении. Если номера строк не отображаются в выбранном окне, значение равно нулю независимо от значения pixelwise. Используйтеwith-selected-window(см. Выбор окон), если вам нужна эта информация об другом окне.
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/Size-of-Displayed-Text.html