Вы можете использовать font-lock-add-keywords для добавления дополнительных правил подсветки на основе поиска в основной режим, и font-lock-remove-keywords для удаления правил. Вы также можете настроить опцию font-lock-ignore, чтобы выборочно отключить правила подсветки для ключевых слов, соответствующих определенным критериям.
Эта функция добавляет выделение keywords для текущего буфера или для основного режима mode. Аргумент keywords должен быть списком в том же формате, что и переменная font-lock-keywords.
Если mode — это символ, представляющий имя команды основного режима, например c-mode, то эффект заключается в том, что включение режима Font Lock в mode добавит keywords в font-lock-keywords. Вызов с не-nil значением mode корректен только в вашем файле ~/.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.
Эта функция удаляет 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. Если она не nil, ее значение представляет собой список элементов следующей формы:
(symbol condition …)
Здесь symbol — это символ, обычно основной или второстепенный режим. Последующие conditionы элемента списка symbol будут действовать, если symbol связан, и его значение не равно nil. Для символа режима это означает, что текущий основной режим производный от этого режима, или что второстепенный режим включен в буфере. Когда condition действует, любая подсветка, вызванная элементами font-lock-keywords, соответствующими condition, будет отключена.
Каждая 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 *))))Построчно это делает следующее:
help-echo.
whitespace-mode (второстепенный режим), также не выделяет пустую строку в начале буфера.