GNU Emacs For Mac OS X Pure builds of Emacs for Mac OS X. Download Emacs Version 27.1-1 Universal Binary (62.351 MB) Released 2020-08-11 Usually there's a nifty page here with a big download button. But you are using a browser which doesn't support SVG.
I wanted a nice experience using Emacs for Mac OS X. By 'nice' Imean:
You too can bring several hours and three separate scripting tools tobear on this, or follow the simple (hah hah) instructions below.
First, install Emacs For Mac OS X. The Emacs that comes with OS X isold and crusty, and the one at that site is new and Cocoa-ready andRetina-enabled and so on. Put it in
/Applications - if you put itsomewhere else, you'll need to correct all the other scripts I'mmentioning in this post.
Open up the AppleScript Editor. If you're an Emacs user this probablylooks awful and confusing to you. Paste the following into it:
Press ⌘K to compile it, then ⌘S and save it in
/Applications/Development. (This subfolder keeps your Applicationsmenu clean, and has an important effect on sort order later.) To giveit a nice icon, select the original
Emacs.app; press ⌘I; click theicon in the top-left; press ⌘C; select on your new
Emacs Server.appbundle; press ⌘I; click the icon in the top-left; press ⌘V.
Open up System Preferences > Users & Groups > Login Items and nowyou can press the
+ button and choose Emacs Server.
The server is invisible until you first connect a client to it. Thenit will appear in the dock, as the regular
To make a dock icon that opens up a new Emacs frame - a client if theserver is available, a standalone instance otherwise - create thefollowing script in the AppleScript Editor and save it as anApplication named Emacs Client. in
Then drag this from the Applications folder to your dock. This willalso make it so typing
emacs into Spotlight selects this as thefirst item ('Development' sorts before 'Emacs', 'Client' sorts before'Server').
If connected to the server, this opens up a new client frame eachclick, by design. To just raise existing frames, click the otherEmacs icon on the dock, representing the running application.
I put these in
~/local/bin. You'll need to add that to your
$PATHif you haven't already. First, two simple ones. These will start newinstances, not clients, but they're necessary to properly handle shellarguments for fallbacks for clients. They're also nice to have if youactually want to start a new instance.
Start a new Cocoa instance -
Start a new terminal instance -
Now for something ma little ore complicated -
ec, start a Cocoaclient or fall back to a new instance (via the above
emacsc) if theserver is unavailable.
et, for a terminal client or new terminal instance.
et scripts instead of aliases? Many tools will failif
$EDITOR does not resolve to an actual executable somewhere in
$PATH because they invoke the tool directly instead of invoking ashell to run it.
Finally: Some aliases for
~/.bash_profile, to override the ancientversion of Emacs that Mac OS X comes with by default.
If you start
ec from Terminal, Mac OS X doesn't realizeyou probably want to switch focus to the Emacs session automatically.There are also plenty of other ways you might start Emacs besidestyping a command into Terminal, and you probably want the new framesfocused then as well.
To do this, we can take advantage of the
ns features in Emacs Lispand the frame-creation hooks. Add the following to your
~/.emacs orsome file it loads:
Now anything that opens or selects a frame will also activate Emacsfor Finder. The
featurep check means this is harmless to load onnon-OS X platforms, and
ns-raise-emacs is not
(interactive) forreasons that will be self-evident if you think about them.
Launch Services is happy to start the Emacs Server instance but losestrack of it afterwards. This is mostly harmless but annoying.
The second Emacs icon on the dock (the one for the main
Emacs.apprather than your custom
Emacs Client.app) behaves oddly when noframes are visible. Its menu bar and context menu don't work, and youcan't start a new frame from it directly. This is likely an issuebecause both Emacs and Finder assume any graphical application has atleast one main window / frame, even if it might not be visible.
(Thanks to Dan Gerrity for pointing out a typo in the original posted
emacst script, and Sean B. Palmer for Emacs Lisp improvements thatled to much simpler shell scripts.)