【问题标题】:Font Problem in EmacsEmacs 中的字体问题
【发布时间】:2011-01-27 00:12:32
【问题描述】:

我将花一些时间在 Habenero Java 上工作,这是常规 Java 的一个小变种,为了让我的生活更轻松,我正在尝试定义一个 Emacs 模式来使用它。

现在,我要做的只是定义一个新的从 Java 继承的主要模式并添加三个新关键字:finishasyncforall。这是我目前所拥有的:

(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


【解决方案1】:

一种方法是将关键字元素更改为(matcher . subexp-highlighter) 格式,其中subexp0overridet

(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

【讨论】:

    猜你喜欢
    • 2014-11-29
    • 1970-01-01
    • 1970-01-01
    • 2011-03-17
    • 1970-01-01
    • 2012-04-01
    • 2013-07-05
    • 2013-06-08
    • 1970-01-01
    相关资源
    最近更新 更多