Subject: bug#20285: 25.0.50; blink-cursor-mode sometimes stops blinking

From: Eli Zaretskii <[email-masked]>
Date: Sat, 11 Apr 2015 09:30:32 +0300

> From: Stefan Monnier <[email-masked]>
> Cc: Eli Zaretskii <[email-masked]>, [email-masked]
> Date: Fri, 10 Apr 2015 17:50:16 -0400
> 
> > I can at least confirm that `blink-cursor-timer-function' runs every 0.5
> > seconds and toggles the visibility state of the cursor.  When that state
> > doesn't appear on the screen, then what else can it be except for a
> > skipped redisplay.
> 
> Of course, I don't know what it is, but it could be many other things,
> such as a successful redisplay which somehow just didn't think the
> relevant window needed to be refreshed.

The change of the cursor blink state explicitly prevents this
redisplay optimization, see line 13634 of xdisp.c.

> Or a misinterpretation of the state of the cursor?

How can that happen?  The state is a simple on/off variable.

> Or maybe the cursor state is indeed changed, but not in the right window?

Then why does this not happen once the initial load of timers' work is
done, i.e. when Emacs is _really_ idle?

> >> Have you tried to call `redisplay' explicitly from the blink-cursor
> >> timer?
> > Yes, then it blinks fine even under stress.
> 
> Great, so that would hint at redisplay being skipped, indeed.
> Revision 9e77c1b7bcfd0807be7fe67daf73c2320e864309 changed the way we
> decide when to skip a redisplay recently.  The change should make us
> skip redisplay strictly less often rather than more often, but maybe
> there's a problem in that change.

Unlikely, since I see the problem since Emacs 24.4 at least.