在Emacs中添加和引用新面孔

时间:2016-02-25 18:20:53

标签: emacs emacs-faces

我在Emacs中定义了一个新面孔,但着色没有生效。以下是~/.emacs中的面部和模式定义:

(defface sml-highlight-operator-face
  '((t (:foreground "red")))
  "SML operator highlighting"
  :group 'basic-faces)

(defvar sml-font-lock-keywords
   ((,(regexp-opt '("fun" "fn" "let" "val" "datatype" "type" "case" "of" "end" "structure" "struct" "signature" "sig"))
     (0 font-lock-keyword-face))
    ("[][=|><-+;,{}():]" (0 sml-highlight-operator-face))))

;;;###autoload
(define-derived-mode sml-mode prog-mode "SML"
  "SML major mode."
  (set (make-local-variable 'comment-start) "(* ")
  (set (make-local-variable 'comment-end) " *)")
  (set (make-local-variable 'font-lock-defaults)
       '(sml-font-lock-keywords)))

然而,当我使用font-lock-builtin-face而不是sml-highlight-operator-face时,这些字符会突出显示(尽管颜色我不想要)。我做错了什么?

1 个答案:

答案 0 :(得分:4)

font-lock-keywords中的元素(0 sml-highlight-operator-face)没有说&#34;使用face sml-highlight-operator-face进行子匹配0&#34;但是&#34;使用评估表达式sml-highlight-operator-face的结果作为面子来进行子匹配0&#34;。

以下,您需要使用(0 'sml-highlight-operator-face)

顺便说一下,现在的惯例是不要对面部使用-face后缀(当然这样的后缀仍然用于变量保持面孔),所以我们没有&#39;我还是希望将font-lock-foo-face面部重命名为font-lock-foo(尽管这会让您感到困惑,因为很多字体锁定规则会说(0 font-lock-foo-face)之类的内容并且人们认为它指的是font-lock-foo-face面,而它指的是font-lock-foo-face变量(其值包含font-lock-foo-face面)。