【发布时间】:2011-01-27 00:12:32
【问题描述】:
我将花一些时间在 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 的变量一样。
有人知道如何解决这个问题吗?对此的挫败感让我感到沮丧。
【问题讨论】:
-
当我摆弄 csharp-mode 时,它就像 Java-mode 基于 cc-mode 一样,我需要深入研究 cc-mode 逻辑以确定发生了什么。我了解到(a)在 cc-mode 解析逻辑中有一些 Java 的特殊情况。 (b) 为 Java 模式定义了几种不同类别的关键字;也许在其他类中添加“完成”等会起作用。 (c) 调整 cc 模式很困难。
标签: emacs elisp syntax-highlighting