在Emacs中,我希望像这样的emacs lisp引用符号:'blah
以不同的颜色显示。我该如何使用font-lock
模式实现这一点?
在Emacs中,我希望像这样的emacs lisp引用符号:'blah
以不同的颜色显示。我该如何使用font-lock
模式实现这一点?
尝试:
(font-lock-add-keywords 'emacs-lisp-mode
'(("'[-a-zA-Z_][-a-zA-Z0-9_]*\\>" 0 'font-lock-constant-face)))
(font-lock-add-keywords 'emacs-lisp-mode
'(("'\\([-a-zA-Z_][-a-zA-Z0-9_]*\\)\\>" 1 'font-lock-constant-face)))
这不会对注释或字符串进行着色,因为它们在之前已经被着色了,而 font-lock(默认情况下)不会重新对其进行着色。
'(hello world)
和(hello world)
之间的差异。为此,仅突出显示引号可能不足够,因此代码的注释部分是为了突出显示引号后面的开括号。它们被注释掉,因为我认为它与其他以不同颜色突出显示嵌套括号的软件包不兼容,并且您很可能正在使用其中一个软件包。(defface my-lisp-quoted-symbol-face
'((t :inherit font-lock-constant-face))
"Face for Lisp quoted symbols.")
(defface my-lisp-quote-face
'((t :inherit warning))
"Face for Lisp quotes.")
;; (defface my-lisp-quoted-open-paren-face
;; '((t :weight bold
;; :inherit my-lisp-quoted-symbol-face))
;; "Face for Lisp quoted open paren.")
(defvar my--lisp-quote-regexp
(rx (group "'")
(or symbol-start
(group (syntax open-parenthesis)))))
(defvar my--lisp-quoted-symbol-regexp
(rx "'" (group (+ (or (syntax symbol)
(syntax word))))))
(dolist (mode (list 'emacs-lisp-mode
'lisp-mode))
(font-lock-add-keywords mode
`((,my--lisp-quote-regexp
(1 'my-lisp-quote-face)
;; (2 'my-lisp-quoted-open-paren-face nil t)
)
(,my--lisp-quoted-symbol-regexp
1 'my-lisp-quoted-symbol-face))))