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