Spec-Zone.ru › Elisp

Структура данных строки режима

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

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

Ниже приведены значения различных типов данных в качестве конструкций строки режима:

string

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

Если части строки имеют свойства face, они управляют отображением текста так же, как и текста в буфере. По умолчанию все символы, у которых нет свойств face, отображаются с начертанием mode-line или mode-line-inactive (см. Стандартные начертания в Руководстве GNU Emacs). Свойства help-echo и keymap в string имеют особое значение. См. Свойства в строке режима.

symbol

Символ в качестве конструкции строки режима обозначает своё значение. Значение symbol используется как конструкция строки режима вместо symbol. Однако символы t и nil игнорируются, как и любой символ, значение которого не определено.

Есть одно исключение: если значением symbol является строка, она отображается буквально: %-конструкции не распознаются.

Если symbol не помечен как рискованный (то есть у него нет свойства risky-local-variable, отличного от nil), все текстовые свойства, указанные в значении symbol, игнорируются. Сюда входят текстовые свойства строк в значении symbol, а также все содержащиеся в нём формы :eval и :propertize. Это сделано из соображений безопасности: значения нерискованных переменных можно автоматически задавать из переменных файла, не запрашивая подтверждения у пользователя.

(string rest…)
(list rest…)

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

(:eval form)

Список, первым элементом которого является символ :eval, означает, что нужно вычислить form и использовать результат как отображаемую строку. Убедитесь, что при этом вычислении не загружаются файлы и не вызываются такие функции, как posn-at-point или window-in-direction, которые сами вычисляют строку режима: это может привести к бесконечной рекурсии.

(:propertize elt props…)

Список, первым элементом которого является символ :propertize, означает, что конструкцию строки режима elt нужно обработать рекурсивно, а затем добавить к результату текстовые свойства, заданные в props. Аргумент props должен состоять из нуля или более пар text-property value. Если elt является строкой с текстовыми свойствами или возвращает такую строку, все символы этой строки должны иметь одинаковые свойства, иначе некоторые из них могут быть удалены функцией :propertize.

(symbol then else)

Список, первым элементом которого является символ, не являющийся ключевым словом, задаёт условие. Его смысл зависит от значения symbol. Если значение symbol отлично от nil, второй элемент, then, рекурсивно обрабатывается как конструкция строки режима. В противном случае рекурсивно обрабатывается третий элемент, else. Элемент else можно опустить; тогда конструкция строки режима ничего не отображает, если значение symbol равно nil или не определено.

(width rest…)

Список, первым элементом которого является целое число, задаёт усечение или дополнение результатов обработки rest. Оставшиеся элементы rest рекурсивно обрабатываются как конструкции строки режима, а результаты объединяются. Если width положительно, результат дополняется пробелами справа, если его ширина меньше width. Если width отрицательно, результат усекается справа до −width столбцов, если его ширина превышает −width.

Например, обычно процент буфера, находящийся выше верхнего края окна, отображают с помощью списка такого вида: (-3 "%p").

Copyright © 1990-1996, 1998-2026 Free Software Foundation, Inc.
Licensed under the GNU GPL license.
https://www.gnu.org/software/emacs/manual/html_node/elisp/Mode-Line-Data.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API