add emacs blog article
This commit is contained in:
		
					parent
					
						
							
								7f227c9026
							
						
					
				
			
			
				commit
				
					
						a8a92b4aef
					
				
			
		
					 2 changed files with 111 additions and 0 deletions
				
			
		
							
								
								
									
										111
									
								
								content/u/blog/emacs-server-the-smart-way/contents.lr
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										111
									
								
								content/u/blog/emacs-server-the-smart-way/contents.lr
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -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).
 | 
			
		||||
 | 
			
		||||

 | 
			
		||||
							
								
								
									
										
											BIN
										
									
								
								content/u/blog/emacs-server-the-smart-way/emacs.png
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								content/u/blog/emacs-server-the-smart-way/emacs.png
									
										
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| 
		 After Width: | Height: | Size: 136 KiB  | 
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue