Emacs is an amazing editor, but it can be a little slow to start
sometimes. That's why emacsclient
lets you run Emacs as a daemon and
connect to it as a client, negating the startup time and letting you
jump directly into editing.
The two primary ways of getting Emacs onto your Mac are by either
downloading it from Emacs For MacOS X or by installing it through
homebrew using brew cask install emacs
. I prefer the homebrew method
as it automatically adds emacs
and emacsclient
to your $PATH
.
Using it from the command line is a breeze. I have this alias in my
.bashrc
alias em="emacsclient -t -a ''"
This way I can type em <filename>
to edit a file. -t
tells
emacsclient to start in terminal mode, and -a ''
tell it to start the
Emacs daemon process if it isn't already running.
Getting the GUI version to run without first opening the command line
is a little trickier. Homebrew provides an app for emacs
, but no
launcher for emacsclient
. The way I've worked around that is by
using iCanHazShortcut, which lets you bind arbitrary shell commands to
keyboard shortcuts. You can download the app from the release area on
github.
To add a new shortcut, download and install iCanHazShortcut, then open
the app and click the Shortcuts
tab at the top. Then click the plus
in the bottom right corner, click inside the Shortcut
field, press
the desired shortcut keys, give it an action name, and a command.
To launch emacsclient
, I have a shortcut bound to
⌃ + ⇧ + ⌘ + E
which runs
emacsclient -c -n -a ''
The -c
flag tells emacsclient
to open a GUI window instead of in
terminal mode. The -n
flag tells the command to return once the
window is opened, instead of waiting for the client to close. Finally,
like before the -a ''
flag tells emacsclient
to start the Emacs
daemon if it isn't already running.
Now all I have to do is press ⌃ + ⇧ + ⌘ + E and a new Emacs window pops up with no startup delay!
It's also possible to create an "application" shortcut for
emacsclient
using Automator.
Create a new automation as an Application with the Run Shell Script step. Then add the following as the contents of the script.
/opt/homebrew/bin/emacsclient \
--no-wait \
--quiet \
--suppress-output \
--create-frame \
"$@"
Replacing /opt/homebrew/bin/emacsclient
with the path to your
emacsclient
if it's located elsewhere.
Then set Pass input
to as arguments
.
Finally place the Automator application in your /Applications
directory.
You should now be able to open Emacsclient through spotlight and associate it with filetypes.