用font-lock-add-keywords定义新关键字打破/覆盖变量名着色(emacs)



我试图让emacs在c中添加一些额外的关键字。特别是,我想添加RESTRICT。我:

(add-hook 'c-mode-common-hook
      (lambda ()
        (font-lock-add-keywords nil
                    '(("\<\(RESTRICT\)\>" . font-lock-keyword-face))) ))

然而,这(不出所料)只会导致emacs使用keyword-face为"RESTRICT"的实例上色。

"restrict"(小写)已经是emacs的C关键字知识的一部分。如果我声明:

int * restrict foo;

"int"用type-face着色,"restrict"用keyword-face着色,"foo"用variable-name-face着色。但是对于新的RESTRICT词,如果我声明:

int * RESTRICT bar;

"int"和前面一样上色,RESTRICT用keyword-face上色。但是"bar"对它没有影响。如果没有我的规则,"RESTRICT"将被标记为variable-name-face,而"bar"将未被修改,这是正确的。

无论如何,问题是:我如何在第二个代码块中使用变量名-面使emacs颜色"条"?我希望emacs实际上将"RESTRICT"视为语言中的关键字(以便变量名获得颜色),而不仅仅是以某种方式为"RESTRICT"的实例着色。

我猜您可能想在cc-lang中重写这个定义。El (cc模式的一部分):

(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模式的专家,但我找不到一个明显的方法来覆盖这个绑定

相关内容

  • 没有找到相关文章

最新更新