Subject: Re: bug#22466: 25.0.50; disable-theme apparently forces a redisplay and causes a screen flash

From: Eli Zaretskii <[email-masked]>
Date: Tue, 26 Jan 2016 16:58:26 +0200

> From: Artur Malabarba <[email-masked]>
> Date: Tue, 26 Jan 2016 09:02:29 +0000
> 
> 
> 1. From “emacs -Q” evaluate `(load-theme 'tango-dark)'. Any other theme
> with a dark background will also do.
> 
> 2. Then, notice how every time you evaluate the following code, the
> screen flashes white for a moment, and then resumes the exact same
> appearance.
> 
>     (progn (disable-theme 'tango-dark)
>            (load-theme 'tango-dark))
> 
> Of course, “resuming the same appearance” is expected, the problem is
> that the white flash is distracting, unnecessary, and eye-hurting.
> 
> I understand _why_ it happens (after `disable-theme' the background is
> actually white), but I don't see why it _has_ to happen. That is, why
> does Emacs redisplay the frame in the middle of lisp evaluation, instead
> of waiting until the end of the command loop?

It's not redisplay that does this.  It's the fact that disable-theme
changes the frame's background color, and when that happens, we
immediately clear the frame using the new background color, as part of
the modify-frame-parameters call.

Redisplay only handles the portions of display where there's text and
other decorations that we manage.  Clearing the frame with the new
background color is not redisplay's job.

> More importantly, is this redisplay (or “partial redisplay”, or whatever
> it is) be avoided, so Emacs doesn't flash white on my pretty little eyes?
> 
> -----
> 
> ps: In case it helps, investigation shows that this is caused by this
> form inside `disable-theme':
> 
>     (set-frame-parameter frame 'background-color
>     			     (custom--frame-color-default
>     			      frame :background "background" "Background"
>     			      "unspecified-bg" "white"))
> 
> I'm not saying this form is wrong. I'm just pointing to where it happens.

What happens if you remove that from disable-theme?  (I don't really
understand why it has to specify "white".)

Anyway, how come you get to doing this so often it hurts your eyes?
Aren't people setting their beloved theme once when the session
starts, and then never change it?