Определение новых ключевых слов с помощью font-lock-add-Keywords разбивает / переопределяет раскраску имен переменных (emacs) - PullRequest
1 голос
/ 01 ноября 2011

Я пытался заставить 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» окрашивается с помощью type-face, «restrict» окрашивается с ключевым словом face, а «foo» - с переменным name-face.Но с моим новым словом RESTRICT, если я объявлю:

int * RESTRICT bar;

"int" будет окрашен, как и раньше, а RESTRICT будет окрашен с ключевым словом face.Но «бар» не влияет на это.Без моего правила «RESTRICT» будет окрашено в переменную name-face, а «bar» будет неизменным, что является правильным.

В любом случае, вопрос заключается в следующем: как сделать цвет Emacs «полосой» во втором кодовом блоке с переменной name-face?Я хочу, чтобы emacs фактически рассматривал «RESTRICT» как ключевое слово в языке (чтобы имена переменных окрашивались), а не только как цветные экземпляры «RESTRICT» определенным образом.

1 Ответ

0 голосов
/ 02 ноября 2011

я предполагаю, что вы как-то хотите переопределить это определение в cc-langs.el (часть cc-mode):

(c-lang-defconst c-type-modifier-kwds
  "Type modifier keywords.  These can occur almost anywhere in types
but they don't build a type of themselves.  Unlike the keywords on
`c-primitive-type-kwds', they are fontified with the keyword face and
not the type face."
  t    nil
  c    '("const" "restrict" "volatile")
  c++  '("const" "volatile" "throw")
  objc '("const" "volatile"))

однако я не эксперт в cc-mode, но яНе удалось найти очевидный способ переопределить эту привязку.

...