【发布时间】:2013-09-02 09:50:12
【问题描述】:
以下代码将通过将 progn 表单传递给字体锁定关键字来直观地将“hello world”替换为“HW”。
(font-lock-add-keywords
nil '(("\\(hello world\\)"
(0 (progn (put-text-property (match-beginning 1) (match-end 1)
'display "HW")
nil)))))
我查看了C-h v font-lock-keywords,看看这是否是字体锁定的文档化功能。 hello world 元素似乎是这种形式:
(MATCHER HIGHLIGHT ...)
这意味着 (0 ...) 是 HIGHLIGHT 并且文档说
HIGHLIGHT should be either MATCH-HIGHLIGHT or MATCH-ANCHORED.
和
MATCH-HIGHLIGHT should be of the form:
(SUBEXP FACENAME [OVERRIDE [LAXMATCH]])
所以我猜 0 是 SUBEXP,(progn ...) 是 FACENAME。但是如果(progn ..) 是一个有效的FACENAME,下面的代码会起作用,但它不起作用。
;; (MATCHER . FACENAME)
(font-lock-add-keywords
nil '(("goodbye lenin"
. (progn (put-text-property (match-beginning 1) (match-end 1)
'display "GL")
nil))))
这让我想到了第一个代码如何工作以及它是否依赖于未记录的功能的问题。
更新:
旁注:更简单的视觉替换方法,没有字体锁定错误
(font-lock-add-keywords
nil '(("my llama"
(0 (progn (put-text-property (match-beginning 0) (match-end 0)
'display "ML")
nil)))))
【问题讨论】:
标签: emacs elisp syntax-highlighting font-lock