Я пытался заставить emacs раскрасить некоторые дополнительные ключевые слова в C. В частности, я добавил RESTRICT. Я сделал:
(add-hook 'c-mode-common-hook
(lambda ()
(font-lock-add-keywords nil
'(("\\<\\(RESTRICT\\)\\>" . font-lock-keyword-face))) ))
Однако это (что неудивительно) просто заставляет emacs окрашивать экземпляры «RESTRICT» с помощью ключевого слова-лица.
"restrict" (нижний регистр) уже является частью знаний emacs о ключевых словах C. Итак, если я объявлю:
int * restrict foo;
«int» окрашен шрифтом, «restrict» — ключевым словом, а «foo» — именем переменной. Но с моим новым словом RESTRICT, если я объявлю:
int * RESTRICT bar;
«int» окрашен, как и раньше, а RESTRICT окрашен ключевым словом. Но "бар" на него не влияет. Без моего правила «RESTRICT» было бы окрашено имя-переменной-лицом, а «bar» не было бы изменено, что правильно.
Во всяком случае, вопрос: как я могу сделать «полосу» цвета emacs во втором кодовом блоке с именем переменной? Я хочу, чтобы emacs фактически рассматривал «RESTRICT» как ключевое слово в языке (чтобы имена переменных окрашивались), а не просто окрашивал экземпляры «RESTRICT» определенным образом.