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

From: Artur Malabarba <[email-masked]>
Date: Wed, 27 Jan 2016 20:20:43 +0000

Eli Zaretskii <[email-masked]> writes:

> So disable-theme actually means go back to the default theme?  If so,
> when someone changes a theme, they don't really need to call
> disable-theme, right?  They could just call load-theme with the new
> theme as an argument?

I'm not sure why you reach this conclusion. `disable-theme' is meant to
disable a single theme. If I have theme X enabled, then (disable-theme 'X) is
supposed to restore the default Emacs appearance. If have two themes enabled (X
and Y), then (disable-theme 'X) is supposed to give me just the
appearance of theme Y.

Right now, that's indeed what it does. But if I remove the form (as you
asked) then it fails to do the above (it doesn't remove the background
set by the disabled theme).

> Then it would make sense to find a way of switching a theme without
> changing the frame's background color, if that's possible (i.e. if the
> new theme keeps the same background color).  If there's a function
> missing for that, I'd suggest to add one.

How about just running that form only when necessary (i.e., only if the
disabled theme actually sets the frame `background-color')?