emacs-devel
[Top][All Lists]
Advanced

[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).



reply via email to

[Prev in Thread] Current Thread [Next in Thread]