我正在尝试在我的Emacs缓冲区中设置一些背景文本属性。例如,
(set-text-properties pos1 pos2 '(face '(:background "cyan")))
但我无法让它发挥作用。我想我有一个线索为什么它不起作用:
我也在使用使用(setq font-lock-defaults '((some-font-lock-keywords)))
的主要模式
如果我注释掉font-lock-defaults
的作业,它就可以了。
答案 0 :(得分:3)
以下是您可以粘贴到*scratch*
中的一些代码:
(let ((inhibit-modification-hooks t))
(make-face 'temp-face)
(set-face-background 'temp-face "cyan")
(put-text-property 1 50 'face 'temp-face))
答案 1 :(得分:1)
Wrt your code:删除第二个引号。请注意,set-text-properties
会替换所有现有文本属性 。您可能只想指定face
属性,而不删除其他属性。请参阅(elisp) Changing Properties
。
是的,字体锁可能会干扰此处 - 通常是应用face
属性时的情况。查看各种突出显示库中的代码,了解如何解决此问题。但一般来说,如果你想要字体锁定,那么你也应该通过font-lock进行突出显示。
答案 2 :(得分:1)
我发现以下内容也有效:将'font
替换为'font-lock-face
:
(set-text-properties pos1 pos2 '(font-lock-face '(:background "cyan")))
或者更好:(正如@Drew和@ abo-abo所建议的那样)
(put-text-property pos1 pos2 'font-lock-face '(:background "cyan"))
然后似乎没有必要先设置(inhibit-modification-hooks t)
..
请参阅http://www.gnu.org/software/emacs/manual/html_node/elisp/Precalculated-Fontification.html