Подсветка синтаксиса вызовов функций C в emacs
Я использую тему подсветки пользовательского синтаксиса для C в emacs, но мне не хватает возможности подсветки вызовов функций. Например:
int func(int foo)
{
return foo;
}
void main()
{
int bar = func(3);
}
есть ли способ выделить вызов "func" в этом примере? Не имеет значения, выделяются ли макросы. Ключевые слова, такие как if, switch или sizeof, не должны совпадать.
спасибо!
3 ответов
порядок записей в списке ключевых слов является значительным. Поэтому, если вы поместите свои записи после тех, которые выделяют ключевые слова и объявления функций, они не будут совпадать.
(font-lock-add-keywords 'c-mode
'(("\(\w+\)\s-*\("
(1 rumpsteak-font-lock-function-call-face)))
t)
кроме того, вы можете использовать функцию вместо регулярного выражения как MATCHER
. Перебор для вашего вопроса, если вы точно изложили свои требования, но полезны в более сложных случаях. Непроверенный (набранный непосредственно в браузере, на самом деле, поэтому я даже не гарантирую сбалансированный скобки.)
(defun rumpsteak-match-function-call (&optional limit)
(while (and (search-forward-regexp "\(\w+\)\s-*\(" limit 'no-error)
(not (save-match-data
(string-match c-keywords-regexp (match-string 1))))
(not (save-excursion
(backward-char)
(forward-sexp)
(c-skip-whitespace-forward)
(or (eobp) (= ?\{ (char-after (point)))))))))
(font-lock-add-keywords 'c-mode
'((rumpsteak-match-function-call
(1 rumpsteak-font-lock-function-call-face))))
(font-lock-add-keywords 'c-mode
'(("\<\([a-zA-Z_]*\) *(" 1 font-lock-keyword-face)))
в свой .в Emacs. Замените font-lock-keyword-face на тот, который вы хотите (M-X list-faces-display, чтобы получить список предопределенных).
вы можете попробовать Ctrl-s для поиска или Ctrl-r для поиска назад. Emacs выделит вашу функцию для вас.