我试图让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着色。但“酒吧”对它没有任何影响。如果没有我的规则,“RESTRICT”将变为color-name-face,而“bar”将是未修改的,这是正确的。
无论如何,问题是:如何在变量名面的第二个代码块中使用emacs颜色“bar”?我希望emacs实际上将“RESTRICT”视为语言中的关键字(以便变量名称变为彩色),而不仅仅是“RESTRICT”的颜色实例。
答案 0 :(得分:0)
我的猜测是你想以某种方式想要在cc-langs.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模式的专家,但我找不到一种明显的方式来覆盖这种绑定。