次のコードは、prog フォームをフォント ロック キーワードに渡すことで、「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 であり、FACENAME であると推測し(progn ...)
ました。しかし(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)))))