1

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それらの文字が強調表示されます (ただし、色は望ましくありません)。私は間違って何をしていますか?

4

1 に答える 1

4

font-lock-keywordsの要素(0 sml-highlight-operator-face)には、「サブマッチ 0 に face sml-highlight-operator-face を使用する」とは記載されていませんが、「式を評価した結果をsml-highlight-operator-faceフェイスとして使用して、サブマッチ 0 に配置します」。

IOW、使用する必要があります(0 'sml-highlight-operator-face)

ところで、最近の慣習では、-face面にサフィックスを使用しないことになっています (もちろん、そのようなサフィックスは、面を保持する変数にはまだ使用されています)。多くのフォントロック規則が次のようなことを言っていて、人々はそれが変数を参照しているのに顔を参照していると考えている場所で見ている混乱(値が顔を保持している)。font-lock-foo-facefont-lock-foo(0 font-lock-foo-face)font-lock-foo-facefont-lock-foo-facefont-lock-foo-face

于 2016-02-25T18:41:03.050 に答える