我将花一些时间在Habenero Java中工作,这是常规Java的一个小变体,为了让我的生活更轻松,我正在尝试定义一个Emacs模式来使用它。
现在,我要做的就是定义一个继承自Java的新主要模式,并添加三个新关键字:finish
,async
和forall
。这就是我到目前为止所做的:
(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
的变量来声明它。
任何人都知道如何解决这个问题吗?对此的沮丧是杀了我。
答案 0 :(得分:0)
一种方法是将关键字元素更改为(matcher . subexp-highlighter)
subexp
为0
且override
为t
的{{1}}格式:
(font-lock-add-keywords nil `((,(regexp-opt '("finish" "async" "forall"))
0 font-lock-keyword-face t)
更多信息可在以下网址找到: http://www.gnu.org/software/emacs/manual/html_node/elisp/Search_002dbased-Fontification.html#Search_002dbased-Fontification