42.16.4 Прочие спецификации отображения

Далее перечислены остальные виды спецификаций отображения, которые можно использовать в текстовом свойстве display.

строка

Отображать строку вместо текста, имеющего это свойство.

Рекурсивные спецификации отображения не поддерживаются — свойства display строки строка, если они есть, не используются.

(image . свойства-изображения)

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

(slice x y ширина высота)

Эта спецификация вместе с image задаёт фрагмент (частичную область) изображения для отображения. Точнее, спецификация должна иметь следующий вид:

 ((slice x y ширина высота) описание-изображения)

где описание-изображения — это дескриптор изображения, описанный выше. Элементы x и y задают верхний левый угол фрагмента внутри изображения; ширина и высота задают ширину и высоту фрагмента. Целые числа означают количество пикселей. Число с плавающей точкой в диапазоне от 0.0 до 1.0 означает соответствующую долю ширины или высоты всего изображения.

((margin nil) строка)

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

(left-fringe битовая-карта [лицо])
(right-fringe битовая-карта [лицо])

Эта спецификация отображения для любого символа в строке текста приводит к тому, что указанная битовая-карта отображается на левом или правом поле для этой строки вместо символов, имеющих данную спецификацию отображения. Необязательный аргумент лицо задаёт лицо, цвета которого будут использоваться для отображения битовой карты. Подробности см. в Битовые карты полей.

Также можно добавить контекстную подсказку для битовых карт на полях через механизм show-help-function, используя текстовые свойства left-fringe-help и right-fringe-help (см. Свойства со специальным значением).

(space-width множитель)

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

(min-width (ширина))

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

(insert (propertize "foo" 'display '(min-width (6.0))))

Это добавит заполнение после ‘foo’, доводя общую ширину до ширины шести обычных символов. Обратите внимание, что затрагиваемые символы определяются по списку (6.0) в свойстве display, сравниваемому с помощью eq. Элемент ширина может быть либо целым числом, либо числом с плавающей точкой, задающим требуемую минимальную ширину текста (см. Пиксельная спецификация для пробелов).

(height высота)

Эта спецификация отображения делает текст выше или ниже. Вот возможные варианты для высоты:

(+ n)

Означает использование шрифта, который на n шагов больше. Шаг определяется набором доступных шрифтов — конкретно, тех, которые соответствуют всем остальным заданным для этого текста атрибутам, кроме высоты. Каждый размер, для которого доступен подходящий шрифт, считается ещё одним шагом. n должно быть целым числом.

(- n)

Означает использование шрифта, который на n шагов меньше.

число множитель

Число множитель означает использование шрифта, который в множитель раз выше стандартного шрифта.

символ функция

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

всё остальное форма

Если значение высоты не подходит ни под один из предыдущих вариантов, оно рассматривается как форма. Emacs вычисляет её для получения новой высоты, при этом символ height привязан к текущей указанной высоте шрифта.

(raise множитель)

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

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

Обратите внимание, что если текст также имеет спецификацию отображения height, которая была задана раньше (т.е. слева от) raise, то последняя повлияет на величину подъёма или опускания в пикселях, поскольку она основана на высоте поднимаемого текста. Поэтому, если вы хотите отобразить нижний или верхний индекс, который меньше обычной высоты текста, рассмотрите возможность указания raise перед height.

Вы можете сделать любую спецификацию отображения условной. Для этого поместите её в другой список вида (when условие . спецификация). Тогда спецификация спецификация применяется только тогда, когда условие вычисляется в значение, отличное от nil. Во время вычисления object привязывается к строке или буферу, имеющему условное свойство display. position и buffer-position привязываются соответственно к позиции внутри object и к позиции в буфере, где было найдено свойство display. Обе позиции могут различаться, если object является строкой.

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