42.16.5 Отображение в полях

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

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

Спецификация отображения поля выглядит как ((margin right-margin) spec) или ((margin left-margin) spec). Здесь spec — это еще одна спецификация отображения, которая указывает, что отображать в поле. Обычно это строка текста для отображения или дескриптор изображения.

Чтобы отобразить что-либо в поле в связи с определенным текстом буфера, не изменяя и не предотвращая отображение этого текста, наложите на этот текст оверлей со свойством before-string и поместите спецификацию отображения поля в содержимое before-string.

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

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

Переменная: left-margin-width

Эта переменная указывает ширину левого поля в единицах ячеек символов (также «столбец»). Она локальна для буфера во всех буферах. Значение nil означает отсутствие левой области поля.

Переменная: right-margin-width

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

Установка этих переменных не влияет на окно немедленно. Эти переменные проверяются при отображении нового буфера в окне. Таким образом, вы можете заставить изменения вступить в силу, вызвав set-window-buffer. Не используйте эти переменные для определения текущей ширины левого или правого поля. Вместо этого используйте функцию window-margins.

Вы также можете установить ширину полей немедленно.

Функция: set-window-margins window left &optional right

Эта функция указывает ширину полей для окна window в единицах ячеек символов. Аргумент left управляет левым полем, а right управляет правым полем (по умолчанию 0).

Если window недостаточно велик, чтобы вместить поля желаемой ширины, это оставляет поля window без изменений.

Указанные здесь значения могут быть позже переопределены вызовом set-window-buffer (см. Буферы и окна) для window с аргументом keep-margins равным nil или опущенным.

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

Эта функция возвращает ширину левого и правого полей window в виде ячейки конс вида (left . right). Если одна из двух областей поля не существует, возвращается nil; если ни одно из двух полей не существует, функция возвращает (nil). Если window равно nil, используется выбранное окно.