Subject: raising hell (frames)

From: Christopher Stacy <[email-masked]>
Date: Fri, 21 Mar 2025 17:35:35 -0400

In Emacs 30.1 on MacOS Monterey:

I am used to the switching of frames being seamless and instant, with no 
special effects.

At some point, MacOS started doing this horrible sliding doors animation 
when switching frames (window manager windows). The effect happens on 
some other applications, not just Emacs. But I think Emacs may be 
requesting it.

The railwaycat Cocoa port 
(https://github.com/railwaycat/homebrew-emacsmacport) does not do the 
effect. More importantly, the (latest) Firefox does not do the effect.  
When I press "cmd-`" on both those applications, I get what I expect. No 
effect, no flicker, no delay --- I am instantly in the other window.

To be able to use Emacs 30.1 which has the effect, I went into the MacOS 
control panel and under Accessibility, enabled "Reduce Motion". This 
replaces the 2 second (!!!) sliding doors with a 1/2 second fader 
effect. That is still too slow and intrusive for doing eyeball 
source-compare by switching frames.

I will note that regular Emacs on Linux also has an effect: the window 
manager does (in my case) the card-flipping effect. I don't use Linux 
very much, but it would be nice to get rid of this on that platform as 
well. No idea what Windows does these days, but 15 years ago when I last 
booted that OS, there was no effect when switching Emacs frames.

I have no idea how any of this works, but I speculate that either (a) 
the application requests an effect (perhaps that's the default) to the 
window manager; or (b) Firefox is coded to the older window system, 
which doesn't do these effects. Either way, it is definitely possible to 
control this and make all effects go away. Somehow.

So I am requesting the ability for Emacs to turn the effects off.
For MacOS, ideally for all platforms, ideally a Lisp variable at runtime.
If you wanted to get fancy it could be a frame property.
i can easily imagine setting it on only some frames, as I use frames for 
a variety of purposes.
I can compile Emacs if that's what I have to do, to test a patch or to 
set a compile-time option. I will gladly test this if anyone will hack it.

Thank You for any clues and hacks!