title: Emacs, be my server --- pub_date: 2020-03-22 --- author: Nico Schottelius --- twitter_handle: NicoSchottelius --- _hidden: no --- _discoverable: yes --- abstract: Let's dive into a very nice emacs feature --- body: Today I want to talk about how amazing emacs is. Not because it is the most feature complete operating system out there or because [it fully emulates vi/vim](https://github.com/emacs-evil/evil). No, because emacs has a very nice feature called **emacs server**. ## What's an emacs server? If emacs is not an operating system, at least emacs stands for "**e**ight **m**egabytes **a**nd **c**onstantly **s**wapping", doesn't it? (This is actually from times where 8 megabytes were quite a lot of memory) So why do people make fun of emacs and how is it related to the emacs server? An emacs server creates a special emacs process that listens on a socket for connecting to it. This way the initialisation is already done before you connect to it and all configurations are already loaded. This is the actual "slow" part of emacs. And is a bit similar to starting python, which also needs to load its libraries at start. With the emacs server running, you can connect to it using the **emacsclient** program. As a matter of fact, [rxvt-unicode](http://software.schmorp.de/pkg/rxvt-unicode.html) also knows about a server mode (checkout the manpage, look for **urxvtd -q -f -o**). For rxvt-unicode, you'd use **urxvtc** to connect to it. So quite simlar. ## What is so cool about the emacs server? Saving a lot of response time and making working with emacs **feel** much faster is the obvious advantage. However, there is a much bigger one: With the emacs server, you can connect to it from the terminal **and** X Windows. Because the emacs server also manages the buffers ("open files" for non-emacs users), you can view the same open file from the terminal or an x window. ## Turning the notebook into a server As you might now, we at ungleich are pretty much into IPv6. So all of our devices are generally speaking world-wide reachable. Our work notebooks are no exception from that. In fact, most notebooks even have their own [/48 IPv6 network assigned via VPN](/u/products/ipv6-vpn/). So if I am away from my notebook, but need to check my open (and potentially unsaved) notes or view my emails, I can use any other computer, ssh to my notebook and type **emacslient -nw** in the terminal. While my regular emacs is running as an X11 window, I can select, display and work in all buffers that I have previously opened in the emacs server. In the terminal, on a remote computer. ## How to configure your system to use the emacs server In my case I start the emacs server when I start X11 in my .xinitrc: ``` eval $(ssh-agent) ... urxvtd -q -f -o emacs --daemon ... ``` And because I always want to have my mail client open, after I started i3, I launch the following command: ``` ssh-add