#+TITLE: Using Emacsclient on MacOS #+DATE: 2020-06-18T17:10:15-04:00 #+DRAFT: false #+DESCRIPTION: Getting emacsclient setup nicely on MacOS #+TAGS[]: macos emacs #+KEYWORDS[]: #+SLUG: #+SUMMARY: #+ATTR_HTML: :alt MacOS Emacsclient #+ATTR_HTML: :title MacOS Emacsclient [[file:macos%20emacsclient.png]] 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 [[https://emacsformacosx.com/][Emacs For MacOS X]] or by installing it through [[https://brew.sh/][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= #+BEGIN_SRC shell alias em="emacsclient -t -a ''" #+END_SRC This way I can type =em = 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 [[https://github.com/deseven/icanhazshortcut][iCanHazShortcut]], which lets you bind arbitrary shell commands to keyboard shortcuts. You can download the app from the [[https://github.com/deseven/icanhazshortcut/releases][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 @@html: + + + E@@ which runs #+BEGIN_SRC shell emacsclient -c -n -a '' #+END_SRC 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 @@html: + + + E@@ and a new Emacs window pops up with no startup delay!