42.16.3 Спецификация пикселей для областей

Значения свойств :width, :align-to, :height и :ascent могут быть специальным типом выражения, которое вычисляется во время повторного отображения. Результат вычисления используется как абсолютное число пикселей.

Поддерживаются следующие выражения:

  expr ::= num | (num) | unit | elem | pos | image | xwidget | form
  num  ::= integer | float | symbol
  unit ::= in | mm | cm | width | height
  elem ::= left-fringe | right-fringe | left-margin | right-margin
        |  scroll-bar | text
  pos  ::= left | center | right
  form ::= (num . expr) | (op expr ...)
  op   ::= + | -

Форма num указывает дробную часть высоты или ширины шрифта по умолчанию. Форма (num) указывает абсолютное число пикселей. Если num является символом, используется его привязка локально для буфера; эта привязка может быть числом или ячейкой cons с формами, показанными выше (включая еще одну ячейку cons, car которой является символом с локальной привязкой для буфера).

Единицы in, mm и cm указывают количество пикселей на дюйм, миллиметр и сантиметр соответственно. Единицы width и height соответствуют ширине и высоте текущей области по умолчанию. Спецификация изображения вида (image . props) (см. Описание изображений) соответствует ширине или высоте указанного изображения. Аналогично, спецификация xwidget вида (xwidget . props) означает ширину или высоту указанного xwidget.

Элементы left-fringe, right-fringe, left-margin, right-margin, scroll-bar и text указывают ширину соответствующей области окна. Когда окно отображает номера строк (см. Размер отображаемого текста), ширина области text уменьшается на пространство экрана, занимаемое отображением номеров строк.

Позиции left, center и right могут использоваться с :align-to для указания позиции относительно левого, центрального или правого края области текста. Когда окно отображает номера строк, и :align-to используется в свойствах отображения текста буфера (в отличие от строки заголовка, см. ниже), позиции left и center смещаются с учетом пространства экрана, занимаемого отображением номеров строк.

Любой из вышеуказанных элементов окна (кроме text) также может использоваться с :align-to для указания того, что позиция относительно левого края данной области. Как только установлена базовая смещение для относительной позиции (первым вхождением одного из этих символов), дальнейшие вхождения этих символов интерпретируются как ширина указанной области. Например, чтобы выровнять по центру левого поля, используйте

:align-to (+ left-margin (0.5 . left-margin))

Если не установлено конкретное базовое смещение для выравнивания, оно всегда относительно левого края области текста. Например, ‘:align-to 0’ выравнивается с первой текстовой колонкой в области текста. Когда окно отображает номера строк, считается, что текст начинается там, где заканчивается пространство, используемое для отображения номеров строк.

Значение вида (num . expr) означает произведение значений num и expr. Например, (2 . in) указывает ширину в 2 дюйма, в то время как (0.5 . image) указывает половину ширины (или высоты) указанного image (который должен быть задан его спецификацией изображения).

Форма (+ expr ...) суммирует значения выражений. Форма (- expr ...) отрицает или вычитает значения выражений.

Текст, отображаемый в строке заголовка, использующий спецификации отображения :align-to, не выравнивается автоматически при включении и выключении display-line-numbers-mode или при изменении ширины номеров строк на отображении. Чтобы настроить обновление выравнивания текста в строке заголовка, сохраняя текст в строке заголовка выровненным с текстом буфера, включите header-line-indent-mode в буфере и используйте его две переменные, header-line-indent и header-line-indent-width, в спецификации отображения. См. Строки заголовка окна. Вот простой пример:

(setq header-line-format
      (concat (propertize " "
                          'display
                          '(space :align-to
                                  (+ header-line-indent-width 10)))
              "Column"))

Это сохранит текст ‘Column’ в строке заголовка выровненным с 10-й колонкой текста буфера, независимо от того, включен ли display-line-numbers-mode или выключен, а также когда изменяется ширина отображения номеров строк.