Настройка подсветки на основе поиска
Вы можете использовать font-lock-add-keywords для добавления дополнительных правил подсветки на основе поиска в основной режим, а font-lock-remove-keywords — для удаления правил. Вы также можете настроить параметр font-lock-ignore, чтобы выборочно отключать правила подсветки для ключевых слов, соответствующих определённым критериям.
- Функция: font-lock-add-keywords mode keywords &optional how
-
Эта функция добавляет правила подсветки keywords для текущего буфера или для основного режима mode. Аргумент keywords должен быть списком того же формата, что и переменная
font-lock-keywords.Если mode — это символ, обозначающий имя команды основного режима, например
c-mode, то при включении режима Font Lock в mode значение keywords будет добавлено вfont-lock-keywords. Вызов с ненулевым значением mode, отличным отnil, допустим только в файле ~/.emacs.Если mode —
nil, эта функция добавляет keywords вfont-lock-keywordsтекущего буфера. Этот способ вызоваfont-lock-add-keywordsобычно используется в функциях-хуках режимов.По умолчанию keywords добавляются в начало
font-lock-keywords. Если необязательный аргумент how равенset, он используется для замены значенияfont-lock-keywords. Если how имеет любое другое ненулевое значение, отличное отnil, значение добавляется в конецfont-lock-keywords.Некоторые режимы предоставляют специальную поддержку, которую можно использовать в дополнительных шаблонах подсветки. См., например, переменные
c-font-lock-extra-types,c++-font-lock-extra-typesиjava-font-lock-extra-types.Предупреждение: Команды основных режимов ни при каких обстоятельствах не должны вызывать
font-lock-add-keywords— ни напрямую, ни косвенно, за исключением вызова через хуки режимов. (Это привело бы к некорректному поведению некоторых второстепенных режимов.) Для настройки правил подсветки на основе поиска им следует задаватьfont-lock-keywords.
- Функция: font-lock-remove-keywords mode keywords
Эта функция удаляет keywords из
font-lock-keywordsдля текущего буфера или для основного режима mode. Как и вfont-lock-add-keywords, значение mode должно быть именем команды основного режима илиnil. Все предостережения и требования, относящиеся кfont-lock-add-keywords, применяются и здесь. Аргумент keywords должен в точности совпадать с аргументом, использованным в соответствующем вызовеfont-lock-add-keywords.
Например, следующий код добавляет два шаблона подсветки для режима C: один выделяет слово «FIXME» даже в комментариях, а другой выделяет слова «and», «or» и «not» как ключевые слова.
(font-lock-add-keywords 'c-mode
'(("\\<\\(FIXME\\):" 1 font-lock-warning-face prepend)
("\\<\\(and\\|or\\|not\\)\\>" . font-lock-keyword-face)))
Этот пример действует только непосредственно в режиме C. Чтобы добавить те же шаблоны в режим C и во все производные от него режимы, поступите следующим образом:
(add-hook 'c-mode-hook
(lambda ()
(font-lock-add-keywords nil
'(("\\<\\(FIXME\\):" 1 font-lock-warning-face prepend)
("\\<\\(and\\|or\\|not\\)\\>" .
font-lock-keyword-face)))))
- Пользовательский параметр: font-lock-ignore
-
Этот параметр задаёт условия для выборочного отключения подсветки, выполняемой определёнными ключевыми словами Font Lock. Если значение отлично от
nil, оно представляет собой список элементов следующего вида:(symbol condition ...)
Здесь symbol — это символ, обычно обозначающий основной или второстепенный режим. Последующие condition в элементе списка для symbol будут действовать, если symbol связан с ненулевым значением, отличным от
nil. Для символа режима это означает, что текущий основной режим является производным от этого режима либо что второстепенный режим включён в буфере. Когда действует условие condition, подсветка, вызванная элементамиfont-lock-keywords, соответствующими этому условию, отключается.Каждое condition может иметь один из следующих видов:
- символ
-
Это условие соответствует любому элементу ключевых слов Font Lock, в котором используется данный символ. Обычно это начертание, но может быть любой символ, указанный в списке
font-lock-keywords. Символ может содержать подстановочные знаки:*соответствует любой строке в имени символа,?— одному символу, а[char-set], где char-set — строка из одного или нескольких символов, соответствует одному символу из заданного набора. - строка
-
Это условие соответствует любому элементу ключевых слов Font Lock, у которого matcher — регулярное выражение, соответствующее этой строке. Иными словами, условие соответствует правилу Font Lock, выделяющему эту строку. Таким образом, строка может быть конкретным ключевым словом языка программирования, подсветку которого требуется отключить.
(pred function)-
Это условие соответствует любому элементу ключевых слов Font Lock, для которого вызов function с этим элементом в качестве аргумента возвращает ненулевое значение, отличное от
nil. (not condition)-
Это условие соответствует случаю, когда условие condition не соответствует.
(and condition …)-
Это условие соответствует случаю, когда соответствуют все условия condition.
(or condition …)-
Это условие соответствует случаю, когда соответствует хотя бы одно из условий condition.
(except condition)Это условие можно использовать только на верхнем уровне или внутри конструкции
or. Оно отменяет действие ранее сработавшего условия на том же уровне.
Рассмотрим, например, следующую настройку:
(setq font-lock-ignore
'((prog-mode font-lock-*-face
(except help-echo))
(emacs-lisp-mode (except ";;;###autoload)")
(whitespace-mode whitespace-empty-at-bob-regexp)
(makefile-mode (except *))))
По строкам она выполняет следующие действия:
- Во всех режимах программирования отключает подсветку, вызванную всеми ключевыми словами font-lock, которые применяют одно из стандартных начертаний font-lock (за исключением строк и комментариев, обрабатываемых синтаксическим Font Lock).
- Однако сохраняет все ключевые слова, добавляющие свойство текста
help-echo. - В режиме Emacs Lisp также сохраняет подсветку маркеров автозагрузки, которая была бы исключена первым условием.
- Когда включён
whitespace-mode(второстепенный режим), также не выделяет пустую строку в начале буфера. - Наконец, в режиме Makefile не применяет никаких условий.
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/Customizing-Keywords.html