2

私はemacsにCのいくつかの追加のキーワードを色付けさせようとしていました.特に、私はRESTRICTを追加しました. やった:

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

ただし、これは (当然のことながら) emacs が "RESTRICT" のインスタンスをキーワード フェイスで色付けするだけです。

"restrict" (小文字) は、C キーワードに関する emacs の知識の一部です。したがって、次のように宣言すると:

int * restrict foo;

「int」はタイプフェイス、「restrict」はキーワードフェイス、「foo」は変数名フェイスで色分けされています。しかし、新しい RESTRICT ワードを使用して宣言すると、次のようになります。

int * RESTRICT bar;

「int」は従来通り、RESTRICTはkeyword-faceで色付けします。しかし、「バー」はそれに影響しません。私のルールがなければ、「RESTRICT」は変数名の顔に色付けされ、「バー」は変更されません。これは適切です。

とにかく、問題は次のとおりです。変数名面を使用して2番目のコードブロックでemacsの色を「バー」にするにはどうすればよいですか? 特定の方法で「RESTRICT」のインスタンスを色付けするだけでなく、emacs が実際に「RESTRICT」を言語のキーワードとして (変数名が色付けされるように) 処理するようにしたいと考えています。

4

1 に答える 1

0

私の推測では、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モードの専門家ではありませんが、このバインディングをオーバーライドする明白な方法を見つけることができませんでした.

于 2011-11-02T16:03:57.303 に答える