Emacs como editor por defecto

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:


emacs --daemon

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


emacs --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


[Unit]
Description=Emacs text editor
Documentation=info:emacs man:emacs(1) https://gnu.org/software/emacs/

[Service]
Type=forking
ExecStart=/usr/bin/emacs --daemon
ExecStop=/usr/bin/emacsclient --eval "(kill-emacs)"
Environment=SSH_AUTH_SOCK=%t/keyring/ssh
Restart=on-failure

[Install]
WantedBy=default.target

Activamos el servicio:


systemctl enable --user emacs
systemctl start --user emacs

Podemos comprobar si se está ejecutando correctamete:


systemctl status --user emacs.service

● emacs.service - Emacs text editor
   Loaded: loaded (/home/carlos/.config/systemd/user/emacs.service; enabled; vendor preset: enabled)
   Active: active (running) since Fri 2019-08-23 22:20:59 CEST; 29s ago
     Docs: info:emacs
           man:emacs(1)
           https://gnu.org/software/emacs/
  Process: 5944 ExecStart=/usr/bin/emacs --daemon (code=exited, status=0/SUCCESS)
 Main PID: 5945 (emacs)
   CGroup: /user.slice/user-1000.slice/user@1000.service/emacs.service
           ├─5945 /usr/bin/emacs --daemon
           └─5963 /usr/bin/aspell -a -m -d es --encoding=utf-8

ago 23 22:20:59 asus emacs[5944]: Cleaning up the recentf list...done (0 removed)
ago 23 22:20:59 asus emacs[5944]: Loading /home/carlos/.emacs.d/config.el (source)...done
ago 23 22:20:59 asus emacs[5944]: Starting new Ispell process aspell with espanol dictionary...
ago 23 22:20:59 asus emacs[5944]: Saving file /home/carlos/.emacs.d/recentf...
ago 23 22:20:59 asus emacs[5944]: Wrote /home/carlos/.emacs.d/recentf
ago 23 22:20:59 asus emacs[5944]: Restoring clock data
ago 23 22:20:59 asus emacs[5944]: Loading /home/carlos/.emacs.d/org-clock-save.el (source)...
ago 23 22:20:59 asus emacs[5944]: Loading /home/carlos/.emacs.d/org-clock-save.el (source)...done
ago 23 22:20:59 asus emacs[5944]: Starting Emacs daemon.
ago 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:


emacsclient -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 :


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

Utilizando systemd

Simplemente ejecuta en la terminal:


systemctl stop --user emacs.service

Usando EmacsClient

Terminal

simplemente ejecutando


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

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


export ALTERNATE_EDITOR=""
export EDITOR="emacsclient -t"                  # $EDITOR abre es terminal
export 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


[Desktop Entry]
Name=Emacs (Client)
GenericName=Text Editor
Comment=Edit text
MimeType=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++;
Exec=emacsclient -с -a "emacs" %F
Icon=emacs
Type=Application
Terminal=false
Categories=Development;TextEditor;Utility;
StartupWMClass=Emacs

Referencias