Subject: Re: bug#20404: 25.0.50; Sometimes no fontification with jit-lock-defer-time

From: Tassilo Horn <[email-masked]>
Date: Wed, 22 Apr 2015 22:32:14 +0200

Eli Zaretskii <[email-masked]> writes:

>> Another and even reproducible case is `report-emacs-bug'.  It goes
>> like this:
>> 
>>   1. emacs -Q
>>   2. eval my above settings in *scratch*
>>   3. M-x report-emacs-bug
>> 
>> The new message buffer is completely unfontified initially.  As soon
>> as you move point, font-lock kicks in and the header lines get their
>> proper fontification.  Or maybe it's the other way round, i.e., the
>> buffer is created, then redisplayed, then the fontification takes
>> place but no redisplay is performed thereafter.
>
> Sounds like the idle timer that is started by jit-lock-defer-time
> never runs after the buffer is displayed.

Indeed, that's the case.  Or wait, it eventually runs but much later
than `jit-lock-defer-time' defines.

> Could it be that it already ran before the display?

No.  The bug report buffer is displayed first, and then it takes two or
three seconds until the first jit-lock kicks in.  And then the buffer
will be redisplayed and appears fontified.

I tested using this code:

--8<---------------cut here---------------start------------->8---
(progn
  (setq jit-lock-defer-time 0.0312
        jit-lock-stealth-nice 0.117
        jit-lock-stealth-time 0.23)

  (require 'cl-lib)
  (defvar i 0)
  (advice-add 'jit-lock-deferred-fontify :before
              (lambda ()
                (message "DEFERRED FONTIFY %s" (cl-incf i)))))
--8<---------------cut here---------------end--------------->8---

Bye,
Tassilo