使用font-lock-defaults时在Emacs中设置文本属性

时间:2013-12-29 19:42:05

标签: emacs elisp

我正在尝试在我的Emacs缓冲区中设置一些背景文本属性。例如,

(set-text-properties pos1 pos2 '(face '(:background "cyan")))

但我无法让它发挥作用。我想我有一个线索为什么它不起作用: 我也在使用使用(setq font-lock-defaults '((some-font-lock-keywords)))的主要模式 如果我注释掉font-lock-defaults的作业,它就可以了。

3 个答案:

答案 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