Основы выделения шрифтом
Функциональность выделения шрифтом основана на нескольких основных функциях. Каждая из них вызывает функцию, указанную соответствующей переменной. Эта косвенность позволяет основным и дополнительным режимам изменять способ работы выделения шрифтом в буферах этого режима и даже использовать механизмы выделения шрифтом для функций, не связанных с выделением. (Поэтому в описании ниже используется слово «должен», когда описываются действия функций: режим может настраивать значения соответствующих переменных, чтобы сделать что-то совершенно иное.) Переменные, упомянутые ниже, описаны в Других переменных выделения шрифтом.
-
font-lock-fontify-buffer -
Эта функция должна выделить шрифтом доступную часть текущего буфера, вызвав функцию, указанную в
font-lock-fontify-buffer-function. -
font-lock-unfontify-buffer -
Используется при отключении выделения шрифтом для удаления выделения. Вызывает функцию, указанную в
font-lock-unfontify-buffer-function. -
font-lock-fontify-region beg end &optional loudly -
Должна выделить шрифтом область между beg и end. Если loudly не
nil, должны отображаться сообщения об операции выделения. Вызывает функцию, указанную вfont-lock-fontify-region-function. -
font-lock-unfontify-region beg end -
Должна удалить выделение шрифтом из области между beg и end. Вызывает функцию, указанную в
font-lock-unfontify-region-function. -
font-lock-flush &optional beg end -
Эта функция должна отметить выделение шрифтом области между beg и end как устаревшее. Если не указано или
nil, beg и end по умолчанию устанавливаются в начало и конец доступной части буфера. Вызывает функцию, указанную вfont-lock-flush-function. -
font-lock-ensure &optional beg end -
Эта функция должна убедиться, что область между beg и end выделена шрифтом. Необязательные аргументы beg и end по умолчанию устанавливаются в начало и конец доступной части буфера. Вызывает функцию, указанную в
font-lock-ensure-function. -
font-lock-debug-fontify Это команда-удобство, предназначенная для использования при разработке выделения шрифтом для режима и не должна вызываться из кода Lisp. Она пересчитывает все соответствующие переменные и затем вызывает
font-lock-fontify-regionдля всего буфера.
Существует несколько переменных, которые управляют тем, как режим выделения шрифтом выделяет текст. Однако основные режимы не должны устанавливать ни одну из этих переменных напрямую. Вместо этого они должны установить font-lock-defaults в качестве переменной локальной для буфера. Значение, присваиваемое этой переменной, используется, если и когда режим выделения шрифтом включен, для установки всех остальных переменных.
- Переменная: font-lock-defaults
-
Эта переменная устанавливается режимами для указания, как выделять текст в этом режиме. Она автоматически становится локальной для буфера при установке. Если ее значение равно
nil, режим выделения шрифтом не выполняет выделение, и вы можете использовать меню «Лица» (в меню «Правка», а затем «Свойства текста» в строке меню) для явного назначения лиц тексту в буфере.Если значение отлично от
nil, оно должно выглядеть так:(keywords [keywords-only [case-fold [syntax-alist other-vars…]]])
Первый элемент, keywords, косвенно задает значение
font-lock-keywords, которое направляет выделение шрифтом на основе поиска. Он может быть символом, переменной или функцией, значением которой является список, используемый дляfont-lock-keywords. Он также может быть списком нескольких таких символов, по одному для каждого возможного уровня выделения. Первый символ определяет уровень выделения «по умолчанию для режима», следующий символ определяет уровень 1 выделения, следующий — уровень 2 и так далее. Уровень «по умолчанию для режима» обычно совпадает с уровнем 1. Он используется, когдаfont-lock-maximum-decorationимеет значениеnil. См. Уровни выделения шрифтом.Второй элемент, keywords-only, задает значение переменной
font-lock-keywords-only. Если он опущен илиnil, также выполняется синтаксическое выделение (строк и комментариев). Если он неnil, синтаксическое выделение не выполняется. См. Синтаксическое выделение шрифтом.Третий элемент, case-fold, задает значение
font-lock-keywords-case-fold-search. Если он неnil, режим выделения шрифтом игнорирует регистр при поиске на основе выделения.Если четвертый элемент, syntax-alist, не
nil, он должен быть списком элементов вида(char-or-string . string). Они используются для настройки таблицы синтаксиса для синтаксического выделения; полученная таблица синтаксиса хранится вfont-lock-syntax-table. Если syntax-alist опущен илиnil, синтаксическое выделение использует таблицу синтаксиса, возвращаемую функциейsyntax-table. См. Функции таблиц синтаксиса.Все оставшиеся элементы (если есть) коллективно называются other-vars. Каждый из этих элементов должен иметь вид
(variable . value)— что означает, сделать variable локальной для буфера и затем установить ее в value. Вы можете использовать эти other-vars для установки других переменных, влияющих на выделение, помимо тех, которые вы можете контролировать с помощью первых пяти элементов. См. Другие переменные выделения шрифтом.
Если ваш режим явно выделяет текст, добавляя свойства font-lock-face, он может указать (nil t) для font-lock-defaults для отключения всего автоматического выделения. Однако это не обязательно; можно выделять некоторые части с помощью свойств font-lock-face и настроить автоматическое выделение для других частей текста.
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/Font-Lock-Basics.html