Структура строки режима
Содержание строки режима контролируется структурой данных, называемой конструкцией строки режима, состоящей из списков, строк, символов и чисел, хранящихся в локальных переменных буфера. Каждый тип данных имеет определенное значение для отображения строки режима, как описано ниже. Такая же структура данных используется для построения заголовков фреймов (см. Заголовки фреймов) и заголовков строк (см. Строки заголовков).
Конструкция строки режима может быть такой простой, как фиксированная строка текста, но обычно она определяет, как комбинировать фиксированные строки со значениями переменных для построения текста. Многие из этих переменных сами определены таким образом, чтобы их значения были конструкциями строки режима.
Ниже приведены значения различных типов данных в качестве конструкций строки режима:
string-
Строка как конструкция строки режима отображается дословно, за исключением
%-конструкций в ней. Они обозначают подстановку других данных; см. %-Конструкции.Если части строки имеют свойства
face, они управляют отображением текста так же, как текст в буфере. Любые символы, не имеющие свойствface, отображаются по умолчанию в шрифтеmode-lineилиmode-line-inactive(см. Стандартные стили в Руководстве GNU Emacs). Свойстваhelp-echoиkeymapв строке имеют специальное значение. См. Свойства в режиме. symbol-
Символ в качестве конструкции строки режима представляет его значение. Значение символа используется как конструкция строки режима, вместо символа. Однако символы
tиnilигнорируются, как и любой символ, значение которого пусто.Есть одно исключение: если значение символа — строка, она отображается дословно:
%-конструкции не распознаются.Если символ не помечен как рискованный (т.е., у него есть свойство
nilне-risky-local-variable), все свойства текста, указанные в значении символа, игнорируются. Это включает свойства текста строк в значении символа, а также все формы:evalи:propertizeв нём. (Причина в безопасности: нерискованные переменные могут автоматически устанавливаться из переменных файлов без запроса у пользователя.) (string rest…)(list rest…)-
Список, у которого первый элемент — строка или список, означает рекурсивную обработку всех элементов и конкатенацию результатов. Это самая распространённая форма конструкции строки режима. (Обратите внимание, что свойства текста обрабатываются особо (по соображениям эффективности) при отображении строк в строке режима: учитывается только свойство текста первого символа строки, и затем оно используется для всей строки. Если вам нужна строка с разными свойствами текста, вы должны использовать специальную конструкцию строки режима
:propertize.) (:eval form)-
Список, у которого первый элемент — символ
:eval, означает вычисление формы, и использование результата в качестве строки для отображения. Убедитесь, что это вычисление не загружает никаких файлов, так как это может привести к бесконечной рекурсии. (:propertize elt props…)-
Список, у которого первый элемент — символ
:propertize, означает рекурсивную обработку конструкции строки режима elt, а затем добавление свойств текста, заданных props, к результату. Аргумент props должен состоять из нуля или более пар свойство-текста значение. Если elt является или производит строку со свойствами текста, все символы этой строки должны иметь одинаковые свойства, иначе некоторые из них могут быть удалены:propertize. (symbol then else)-
Список, у которого первый элемент — символ, который не является ключевым словом, определяет условное выражение. Его значение зависит от значения символа. Если символ имеет значение, отличное от
nil, второй элемент, then, обрабатывается рекурсивно как конструкция строки режима. В противном случае обрабатывается третий элемент, else. Вы можете опустить else; тогда конструкция строки режима ничего не отображает, если значение символа равноnilили пустое. (width rest…)-
Список, у которого первый элемент — целое число, определяет усечение или дополнение результатов rest. Остальные элементы rest обрабатываются рекурсивно как конструкции строки режима и конкатенируются вместе. Когда width положительно, результат дополняется пробелами справа, если его ширина меньше width. Когда width отрицательно, результат усекается справа до -width столбцов, если его ширина превышает -width.
Например, обычный способ показать процент буфера, находящегося выше верхней границы окна, заключается в использовании такого списка:
(-3 "%p").
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/Mode-Line-Data.html