首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在elisp中将字体锁定应用于带引号的符号

在elisp中将字体锁定应用于带引号的符号
EN

Stack Overflow用户
提问于 2012-12-17 12:15:06
回答 2查看 354关注 0票数 5

在Emacs中,我希望在emacs lisp中使用带引号的符号,比如:'blah,然后用不同的颜色显示它们。如何使用font-lock模式执行此操作?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-12-17 22:42:46

尝试:

代码语言:javascript
复制
(font-lock-add-keywords 'emacs-lisp-mode
                        '(("'[-a-zA-Z_][-a-zA-Z0-9_]*\\>" 0 'font-lock-constant-face)))

或者(如果您不想让报价着色):

代码语言:javascript
复制
(font-lock-add-keywords 'emacs-lisp-mode
                        '(("'\\([-a-zA-Z_][-a-zA-Z0-9_]*\\)\\>" 1 'font-lock-constant-face)))

这将不会对注释或字符串中的内容进行着色,因为它们在前面是着色的,并且font-lock (默认情况下)不会对内容进行重新着色。

票数 5
EN

Stack Overflow用户

发布于 2013-09-02 20:58:01

下面的代码将为引号本身和后面带有不同面孔的符号启用语法突出显示。如果需要,还可以自定义这两个面。您可能还希望能够轻松地发现'(hello world)(hello world)之间的差异。因此,仅突出显示引号可能还不够,因此代码中注释掉的部分用于突出显示引号后面的左括号。它们被注释掉了,因为我认为它与其他以不同颜色突出显示嵌套括号的包不兼容,而您很可能正在使用这些包中的一个。

代码语言:javascript
复制
(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))))

使用defface和rx使代码更加冗长。defface的好处是很容易定制面孔。当您尝试为其他目的修改此代码时(例如,如果您想让它也注意反引号),rx的好处就来了。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13908192

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档