Emacs como editor por defecto

3 minutos de lectura

Si utilizas Emacs como tu editor de textos favorito quizás te interese hacer que Emacs se ejecute de forma predeterminada cada vez que abras un archivo desde el gestor de ficheros. Además, haciendo uso de la versión servidor de Emacs, podemos conectarnos rápidamente mediante emacsclient al servidor, ya que el archivo de configuración y los paquetes para cada nuevo archivo que se abra, solo se cargarán una primera vez cuando ejecutemos el servidor Emacs

Iniciando el servidor Emacs

Interactivamente

Para habilitar el servidor Emacs:

1
2emacs --daemon

En versiones de Emacs 26.1 y superiores podemos hacer que el servidor corra en segundo plano con el comando

1
2emacs --fg-daemon

Iniciando el servidor Emacs con Systemd

Systemd es el método soportado para iniciar ampliaciones durante el arranque en muchas distribuciones Linux. El siguiente fichero de configuración emacs.service debe de ser creado en ~/.config/systemd/user/emacs.service

 1
 2[Unit]
 3Description=Emacs text editor
 4Documentation=info:emacs man:emacs(1) https://gnu.org/software/emacs/
 5
 6[Service]
 7Type=forking
 8ExecStart=/usr/bin/emacs --daemon
 9ExecStop=/usr/bin/emacsclient --eval "(kill-emacs)"
10Environment=SSH_AUTH_SOCK=%t/keyring/ssh
11Restart=on-failure
12
13[Install]
14WantedBy=default.target

Activamos el servicio:

1
2systemctl enable --user emacs
3systemctl start --user emacs

Podemos comprobar si se está ejecutando correctamete:

 1
 2systemctl status --user emacs.service
 3
 4● emacs.service - Emacs text editor
 5   Loaded: loaded (/home/carlos/.config/systemd/user/emacs.service; enabled; vendor preset: enabled)
 6   Active: active (running) since Fri 2019-08-23 22:20:59 CEST; 29s ago
 7     Docs: info:emacs
 8           man:emacs(1)
 9           https://gnu.org/software/emacs/
10  Process: 5944 ExecStart=/usr/bin/emacs --daemon (code=exited, status=0/SUCCESS)
11 Main PID: 5945 (emacs)
12   CGroup: /user.slice/user-1000.slice/user@1000.service/emacs.service
13           ├─5945 /usr/bin/emacs --daemon
14           └─5963 /usr/bin/aspell -a -m -d es --encoding=utf-8
15
16ago 23 22:20:59 asus emacs[5944]: Cleaning up the recentf list...done (0 removed)
17ago 23 22:20:59 asus emacs[5944]: Loading /home/carlos/.emacs.d/config.el (source)...done
18ago 23 22:20:59 asus emacs[5944]: Starting new Ispell process aspell with espanol dictionary...
19ago 23 22:20:59 asus emacs[5944]: Saving file /home/carlos/.emacs.d/recentf...
20ago 23 22:20:59 asus emacs[5944]: Wrote /home/carlos/.emacs.d/recentf
21ago 23 22:20:59 asus emacs[5944]: Restoring clock data
22ago 23 22:20:59 asus emacs[5944]: Loading /home/carlos/.emacs.d/org-clock-save.el (source)...
23ago 23 22:20:59 asus emacs[5944]: Loading /home/carlos/.emacs.d/org-clock-save.el (source)...done
24ago 23 22:20:59 asus emacs[5944]: Starting Emacs daemon.
25ago 23 22:20:59 asus systemd[1769]: Started Emacs text editor.

Parando el servidor Emacs

La manera más sencilla para parar el servidor Emacs es usando los comandos kill-emacs o save-buffers-kill-emacs desde el mini buffer M x

Desde una terminal

Utilizando el comando emacsclient -e:

1
2emacsclient -e '(kill-emacs)'

Esto apagará el servidor de manera inmediata sin preguntar ni guardar los archivos.

Si queremos que Emacs pregunte si queremos guardar los archivos modificados, podemos usar el comando :

1
2emacsclient -e '(client-save-kill-emacs)'

Utilizando systemd

Simplemente ejecuta en la terminal:

1
2systemctl stop --user emacs.service

Usando EmacsClient

Terminal

simplemente ejecutando

1
2emacsclient -create-frame --alternate-editor=""

Para utilizar emacsclient como el editor por defecto, añade a tu ~/.bashrc:

1
2export ALTERNATE_EDITOR=""
3export EDITOR="emacsclient -t"                  # $EDITOR abre es terminal
4export VISUAL="emacsclient -c -a emacs"         # $VISUAL abre en modo GUI

Si prefieres lanzar Emacs con GUI para editar archivos desde la terminal, cambia -t por -c en la segunda fila.

Escritorio

Podemos crear una entrada para Emacsclient para el menú contextual en Gnome, KDE, XFCE y otros entornos Freedesktop. Creando un archivo llamado emacsclient.desktop en ~/.local/share/applications, con el siguiente código

 1
 2[Desktop Entry]
 3Name=Emacs (Client)
 4GenericName=Text Editor
 5Comment=Edit text
 6MimeType=text/english;text/plain;text/x-makefile;text/x-c++hdr;text/x-c++src;text/x-chdr;text/x-csrc;text/x-java;text/x-moc;text/x-pascal;text/x-tcl;text/x-tex;application/x-shellscript;text/x-c;text/x-c++;
 7Exec=/usr/bin/emacsclient --create-frame --alternate-editor "" %F
 8Icon=emacs
 9Type=Application
10Terminal=false
11Categories=Development;TextEditor;Utility;
12StartupWMClass=Emacs

Referencias