I switched my Homebrew Emacs package to emacs-plus@30 this past week. I am sure there are nuances that are escaping me, but I was mostly after something with a tested launchd service I could manage from brew services
, and I thought the built-in support for system appearance changes seemed pretty cool, since it let me retire 20 lines of elisp that wasn’t nearly as effective as this build is at detecting when Dark Mode is on or off.
With emacs-plus, I think I’ve found the thing that most conforms to what I’m willing to be patient with. Enough so that I was able to make a simple Raycast launcher that wraps emacsclient -c --no-wait
(and could easily make something similar for Alfred or just an Automator app) then hide the Emacs.app from possible completions, and I can get a fresh Emacs frame as close to instantaneously as I care to imagine, without a lot of hassle. I tossed in a quick osascript
at the bottom of the Raycast launcher script to make sure my new frame gets focus right away.
Unlike running (server-start)
inside my init file, the combination of emacs-plus and a service is immune to accidentally bonking my entire Emacs instance: The daemon still toils away in the background even with errant cmd-q’s. I know there are recipes for homegrown launchd services and that none of this is new. I guess the nice part is knowing that this is all packaged up and tested.