Emacs模式:如何指定方括号中的东西应该是彩色的

时间:2011-09-13 12:23:03

标签: emacs elisp mode

我写了一个简单的emacs模式。我如何明确指定所有内容,例如:方括号应为彩色。必须像那样:

( (if thing is in square brackets) . font-lock-string-face)

3 个答案:

答案 0 :(得分:6)

我假设您正在编写一个主要模式,但font-lock-add-keywords也适用于次要模式 模式。请使用C-h f RET font-lock-add-keywords查看其文档。

(define-derived-mode my-mode text-mode "mymode"
  ;; some init code
  (font-lock-add-keywords nil '(("\\[\\(.*\\)\\]"
                                 1 font-lock-warning-face prepend)))
  ;; some more init code
)

答案 1 :(得分:2)

您必须扩展您所使用的模式以合并新的语法规则,或者您只需使用highlight-regexp进行快速和脏的突出显示。

答案 2 :(得分:2)

所以这是一个总结: 要将新关键字添加到模式

(font-lock-add-keywords 'emacs-lisp-mode
  '(("foo" . font-lock-keyword-face)))

它可以有正则表达式:

(font-lock-add-keywords 'emacs-lisp-mode '(("\\[\\(.+?\\)\\]" . font-lock-keyword-face)))

(这使得方括号中的所有字体都具有给定的颜色)

对于当前模式和当前emacs会话 - 您只需评估以下内容:

(font-lock-add-keywords nil '(("\\[\\(.+?\\)\\]" . font-lock-keyword-face)))

(注意 - 此处未指定模式)

使其永久化你可以将它作为钩子添加到模式中:

(add-hook 'bk-grmx-mode-hook
          (lambda ()
            (font-lock-add-keywords nil '(("\\[\\(.+?\\)\\]" . font-lock-keyword-face)))
          )
)

您也可以将其添加到模式规范中:

(define-derived-mode bk-grmx-mode fundamental-mode
  (setq font-lock-defaults '(bk-grmx-keyWords))
  ;; the next line is added:
  (font-lock-add-keywords nil '(("\\[\\(.+?\\)\\]" . font-lock-keyword-face)))
  (setq mode-name "bk-grmx-mode")