2 changed files with 111 additions and 0 deletions
@ -0,0 +1,111 @@
|
||||
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 </dev/null && emacsclient -c -e '(mu4e)' |
||||
``` |
||||
|
||||
The connection to my mailserver is tunneled via SSH to prevent |
||||
security issues from using SSL/TLS. Thus I need to add all my ssh keys |
||||
to the ssh-agent, before starting my mail client. |
||||
|
||||
To actually open a new emacs windown (aka "frame" in emacs speech), I |
||||
use the following configuration in my **~/.i3/config**: |
||||
|
||||
``` |
||||
bindsym $mod+Tab exec emacsclient -c |
||||
``` |
||||
|
||||
## How does this look like? |
||||
|
||||
Below you find a screenshot of my writing this article. The upper |
||||
window is the X11 window, the lower window is a terminal window (they |
||||
happen to be configured to have the same nice background colour). |
||||
|
||||
 |
After Width: | Height: | Size: 136 KiB |
Loading…
Reference in new issue