Configurar Emacs usando Doom
Tags: emacs, linux
Published: 2022-02-11 08:02:07

## ¿Por qué Emacs?
[Emacs](https://www.gnu.org/software/emacs/) fue el primer IDE que aprendí a usar, por aquel entonces todos programábamos en la misma máquina conectándonos por ssh.

Más tarde nos "modernizamos" y empezamos a usar PhpStorm. Así que cuando dejé Php de lado y empecé a programar en Terraform, Ansible y Python, opté por usar PyCharm ya que es un productor de la misma compañía y el cambio iba a ser más sencillo.

Ahora bien el mundo JetBrains tiene su pega, para cada lenguaje necesitas un maldito editor distinto, y cuando empecé a hacer cosillas en Go me negué a instalar otro más.

Vale, Emacs mola mucho y todo lo que tu quieras pero configurarlo es un dolor. Por eso opté por probar [Doom](https://github.com/hlissner/doom-emacs).

##Doom
Doom es un framework para configurar Emacs.

Básicamente nuestra configuración se guarda en `~/.doom.d/` donde tenemos tres ficheros:
* init.el: desde el cual activas o desactivas extensiones
* packages.el: desde el que puedes instalar paquetes de MELPA, ELPA o emacsmirror
* config.el: donde va tu configuración personal

y ejecutando `~/.emacs.d/bin/doom sync` se generará nuestra configuración en `~/.emacs.d/`.

## Instalación
Seguimos los pasos del [getting started](https://github.com/hlissner/doom-emacs/blob/develop/docs/getting_started.org#install) y al arrancar por primera vez Emacs veremos algo como esto:

![Primera carga de Emacs con Doom](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/iakiz9v3itbauzb3i9at.png)

##Configuración

Después de jugar un poco me di cuenta de que había demasiados paquetes instalados que hacían demasiadas cosas que no sabía usar y me “estorbaban”.

Me habían aconsejado fuertemente que probase la extensión [evil](https://github.com/emacs-evil/evil) pero de momento prefiero el modo de edición de emacs “puro”. Me quedo sin galletas :(

Así que comenté las siguientes extensiones:

* evil +everywhere
* +bindings +smartparens

Además de los lenguajes que fuese a utilizar.
Añadimos la configuración para borrar los espacios en blanco al guardar:

```
;; Hooks
(add-hook ‘before-save-hook ‘delete-trailing-whitespace)
```

Arrancamos el servidor, de manera que luego podamos abrir un fichero desde otra terminal:

```
;; Server
(server-start)

$ emacsclient -n .bashrc
```

Añadimos keybindings que para mí son necesarios:

```
;; Keybindings
(global-set-key “\M-p” ‘backward-paragraph)
(global-set-key “\M-n” ‘forward-paragraph)
(global-set-key (kbd “C-7”) ‘undo)
(global-set-key (kbd “C-x p”) ‘counsel-projectile-switch-project)
```

Y con esto ya estaría para funcionar.

## Autocompletado

[Company](https://company-mode.github.io/) ya viene por defecto y en principio con activar lsp sería suficiente. Aunque esta parte aún la tengo algo verde y hay cosas que no terminan de ir fino.

## NeoTree

Es una extensión para ver el árbol de ficheros y directorios de un proyecto. Para activarlo con su extensión de iconos hay que realizar los siguientes cambios:

* instalar “all-the-icons”

```
(package! all-the-icons)
```

* descomentar “neotree” del init.el
* añadir la siguiente configuración:

```
;; NeoTree
(setq neo-theme (if (display-graphic-p) ‘icons ‘arrow))
(global-set-key (kbd “C-x t”) ‘neotree-show)
(setq projectile-switch-project-action ‘neotree-projectile-action)
```

Mi configuración al final ha quedado así:

[Ver repositorio en GitHub](https://github.com/jilgue/doom-emacs-config)