[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: set-text-properties and jit-lock-mode
From: |
Alan Mackenzie |
Subject: |
Re: set-text-properties and jit-lock-mode |
Date: |
Sun, 21 Feb 2016 19:04:38 +0000 |
User-agent: |
Mutt/1.5.24 (2015-08-30) |
Hello, Alan.
On Sun, Feb 21, 2016 at 07:02:31PM +0100, Alan Schmitt wrote:
> Hello,
> I'm tracking down a bug in ledger-mode and I'm now at the point where I
> think I need some help about some emacs core code.
> The problem: if jit-lock-mode it t, then using set-text-properties to
> change the face does not work.
> To reproduce: start emacs with -Q. In the scratch buffer, type "foo".
> Then evaluate:
> (set-text-properties 192 195 (list 'face 'italic))
> Nothing changes, and when I do a `describe-char' on one letter of "foo"
> I don't see the face.
At a guess, what's happening here is this: your `set-text-properties'
does indeed work. But setting text properties is a buffer change. So
`before-change-functions' and `after-change-functions' will both be
executed. `a-c-f' contains `jit-lock-after-change', which helpfully
refontifies the line for you. All this happens before the screen is
redisplayed.
If you bind these hooks to nil around your call, I think it will work:
(let (before-change-functions after-change-functions)
(set-text-properties 192 195 (list 'face 'italic)))
> If I then evaluate
> (setq jit-lock-mode nil)
> (set-text-properties 192 195 (list 'face 'italic))
> then I see the face change to italic, confirmed by `describe-char'.
> As `set-text-properties' is a function in C, I don't know how to look at
> its source (any pointers on how to do this would be great). Is it
> supposed not to work for faces when jit-lock is on?
> Thanks,
> Alan
--
Alan Mackenzie (Nuremberg, Germany).