MacOS Emacsclient

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.

create a new shortcut in icanhazshortcut my emacsclient shortcut

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.

Automator emacsclient script

Finally place the Automator application in your /Applications directory.

You should now be able to open Emacsclient through spotlight and associate it with filetypes.