2011-01-27 12 views
1

通常のJavaのマイナーな変種であるHabenero Javaで時間を過ごしていて、私の人生を楽にするためにEmacsモードを定義しようとしています。Emacsのフォント問題

今私がしようとしているのは、Javaを継承する新しいメジャーモードを定義して、finish,async、およびforallの3つの新しいキーワードを追加することだけです。

(define-derived-mode hj-mode java-mode "Habanero Java" 
    "Major mode for Habanero Java." 
    (font-lock-add-keywords nil `((,(regexp-opt '("finish" "async" "forall")) . 
    font-lock-keyword-face)))) 

私がいる問題は、Emacsが明らかにこれらの新しいキーワードや変数の宣言を区別することができないということです。これは私がこれまで持っているものです。私がasync { x(); }と書くと、Emacsはそれを正しくハイライトします。しかし、私が等価物async x();を書いた場合、Emacsはそれを、asyncという名前で変数を宣言しているかのように書式化します。

anyoneはこれを解決する方法を知っていますか?これ以上の不満は私を殺している。

+0

(font-lock-add-keywords nil '((,(regexp-opt '("finish" "async" "forall")) 0 font-lock-keyword-face t) 

詳しい情報はで見つけることができますJavaモードと同様にcc-modeをベースにしているので、何が起きているのかを判断するために、ccモードのロジックを深く理解する必要がありました。私は、(a)ccモード解析ロジックにJavaの特別なケースがいくつかあることを知りました。 (b)Javaモード用に定義されたいくつかの異なるクラスのキーワードがあります。他のクラスに「finish」などを追加するとうまくいくかもしれません。 (c)ccモードを調整するのは難しいです。 – Cheeso

答えて

関連する問題