开发者

Changing text appearance in Emacs: overlays work, text properties don't

I've been experimenting today with text properties in Emacs. If I position the cursor on a line with some text on it and then execute the following code with M-:, the line is redisplayed in bold.

(overlay-put
 (make-overlay
  (line-beginning-position)
  (line-end-position))
 'face 'bold)

If, however, I wipe out the over开发者_开发知识库lay with (remove-overlays) and execute the following code, nothing happens (except that the word "nil" appears in the minibuffer).

(put-text-property
 (line-beginning-position)
 (line-end-position)
 'face 'bold)

From what I've gleaned so far, I'd expect that these two snippets should produce the same visual results. Why don't they?


When font-lock-mode is on, the face attribute will be overridden. Try font-lock-face instead:

(put-text-property
 (line-beginning-position)
 (line-end-position)
 'font-lock-face 'bold)


ansi-color.el -- "In Emacs, however, things are a bit different: When font-lock is active in a buffer, you cannot simply add face text-properties to the buffer. Font-lock will remove the face text-property using 'font-lock-unfontify-region-function'. If you want to insert the strings returned by 'ansi-color-apply' into such buffers, you must set 'font-lock-unfontify-region-function' to `ansi-color-unfontify-region'. This function will not remove all face text-properties unconditionally. It will keep the face text-properties if the property 'ansi-color' is set.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜