Notxor tiene un blog

Defenestrando la vida


Personalizando emacs a mi manera

Estoy escribiendo este artículo para comprobar cómo funcionan mis ajustes personales de Emacs. Más adelante haré una captura de como ha quedado todo, aunque supongo que esto de personalizarlo es un no acabar nunca, siempre habrá un detalle que pulir o algo que cambiar. Si algo distingue al auténtico friki es que no termina nunca de cacharrear con sus juguetitos: hoy es el día de toquetear los colorines de mi editor favorito. No sólo los colorines, también he tocado algunas cosas más y he añadido algún paquete especial para mejorar la «vista». Hay que recordar que los themes son ficheros de código elisp, es decir: para cambiar las características o el comportamiento de las cosas, hay que ejecutar un programa. La mayor parte de las veces se limitará a establecer el valor de algunas variables para ajustar tipo de letra y/o color; pero hay que estar atentos a lo que haga. De hecho, Emacs, cuando instalas un tema externo pregunta si lo marca como seguro.

Los colores

Definir los colores a gusto de todos es imposible, bien lo deben saber todos aquellos que se hayan currado un theme de cualquier cosa, ya sea una página web o, ─en este caso─, uno para Emacs. Queda dicho, porque espero, como es lo normal, que no le guste a todo el mundo. Lo bueno de personalizar algo es que lo pones a tu gusto o a tus necesidades. Sin embargo, en los temas de Emacs hay tantas cosas que ajustar, tantos colores que se pueden modificar que hacerlo desde cero se presenta como una tarea ardua, o casi infinita. Por ello, he partido de un theme ya hecho. Conste que antes de decidirme a hacer esto he probado decenas de temas a los que siempre terminaba encontrando un pero. Al final, los he desinstalado todos y me he quedado con mi opción, ─no porque sea la mejor, sino porque es mía y la puedo retocar todo lo que quiera─.

Como decía, he partido de un theme ya hecho: leuven-theme viene como uno de los temas de mi instalación por defecto de Emacs. Sólo que viene una versión antigua: 20170912.2328. En su página web se puede encontrar una versión más moderna y con más opciones. El caso es que partiendo de él he ido haciendo pruebas hasta conseguir un tema propio que sólo hay que cargar en nuestro init.el para que funcione, con las siguientes instrucciones.

;;; Tema personalizado
(add-to-list 'custom-theme-load-path "~/.emacs.d/themes")
(load-theme 'notxor t)

En mi caso, se puede apreciar que lo he metido en el directorio themes dentro de .emacs.d; lo he tenido que crear porque no existía, pero lo hago así, porque a partir de este momento, puedo instalar en él los temas que quiera probar y cargarlos sólo haciendo referencia a su nombre.

¿Por qué utilicé leuven?

Básicamente porque ya se ajustaba en muchas cosas a lo que busco en una configuración para Emacs:

  1. Me suelen gustar los colores claros en mi pantalla. Ahora en la versión que tiene en su web también hay un leuven-dark, pero no creo que lo pruebe.
  2. Marca de forma muy diferenciada qué buffer es el activo. Así de un vistazo puedo saber dónde estoy sin perderme por los tres o cuatro que tenga abiertos en ventana.
  3. Su patrón de colores ya se ajustaba bastante a los que tengo configurados, por ejemplo en la barra de estado de i3wm, así que tenía que modificar menos cosas.
  4. Marca muy bien los bloques de texto en org-mode, algo que me viene muy bien cuando hago literate programming de forma que los bloques de código me saltan a la vista.

Cosas que he cambiado del tema original:

  1. El color de fondo. Me gustan los temas claros, pero el blanco original es agotador. Paso muchas horas delante del ordenador y necesitaba un color claro que no agotara mi vista. El resultado ha sido establecer el color #FEFE9A, que es un amarillo muy claro. Eso ha permitido que no tenga que tocar muchos colores de primer plano y que mi vista descanse un poco. Además combina bien con el «azul» de la barra de información de Emacs.
  2. No soporto los cambios de tamaño en los títulos de org-mode o en los de LaTeX. Así que he eliminado todos los «sobredimensionados» que he visto en el tema. Supongo que habrá gente a las que les guste esos cambios de tamaño, pero mi cerebro en un editor de texto normal espera que todas las líneas tengan el mismo alto. Además, sería útil si esas cabeceras tuvieran el mismo estilo que las generadas posteriormente, pero no es así.
  3. Cuando escribo texto tengo configurado que se active automáticamente el modo flyspell. El tema original va subrayando las palabras en color rojo cuando encuentra un error y verde cuando encuentra una repetición. La linea de subrayado es recta y me gusta más cuando es ondulada, así que puse esas líneas onduladas y cambié el color de repetición a un color orange, aunque estoy sopesando la idea de cambiarlo a algún valor de azul.
  4. Algunos colores más que he ido encontrando que no terminaban de cuadrar con los definidos. Seguramente tendré que cambiar más, porque hay algunos colores con magit que no me terminan de convencer, pero de momento lo dejo así y más adelante ya veremos.

Barra de estado de Emacs

No es la primera vez que pruebo powerline y seguramente la acabaré quitando tarde o temprano, porque es algo que a ratos me gusta y a ratos me parece insuficiente. Me explico: es más bonita, en general, que la barra por defecto de Emacs, pero por ejemplo, la barra general me informa cuándo estoy en una sesión emacsclient y cuándo estoy en una normal. Esa información la obvia, no aparece, pero tampoco es demasiado grave.

La configuración no puede ser más sencilla una vez instalado el paquete, en el init.el añadir las siguientes líneas:

;; Mejorando la visualización de la línea de info
(require 'powerline)
(powerline-default-theme)

Lista de ficheros

Una de las cosas que echaba de menos de otros editores era la posibilidad de navegar por directorios y ficheros en su correspondiente ventana. En Emacs también existe esa posibilidad con el paquete dired-sidebar. Para configurarlo, en el apartado custom-set-variables del fichero init.el hay que añadir el tema que queramos, en mi caso:

'(dired-sidebar-theme (quote icons))

Para visualizar los iconos también necesitas instalar el paquete all-the-icons-dired, y si hay algún problema al visualizar los iconos en dired-mode, es posible que tengas que instalar también las fuentes de los iconos, el proceso viene en la ayuda del paquete, pero básicamente se limita a llamar a la función all-the-icons-install-fonts que preguntará si quieres descargar las fuentes e instalarlas. También, para visualizarlos, es posible que necesites añadir un hook también:

(add-hook 'dired-mode-hook 'all-the-icons-dired-mode)

Aquí me encontré un problema con los iconos. Resulta que sin el hook no me los carga en el modo dired normal. Tampoco tendría mucha importancia, pero ya que están me gustaría verlos. El caso es que cuando carga en modo sidebar me duplica los iconos. Cuando refresca el buffer desaparece y queda sólo uno, pero es un detalle que me falta por pulir.

El modo dired-sidebar tampoco lo quiero abierto permanentemente, sólo cuando lo necesite, así que no lo activo por defecto sino que le he asignado. Así sólo lo abro ─y lo cierro─ cuando lo necesito con C-c s.

Como se puede apreciar en las imágenes, la visualización de los iconos en modo texto es imperfecta y se corta según qué fuente utilices en el terminal.

(global-set-key (kbd "C-c s") 'dired-sidebar-toggle-sidebar)

Números de línea

Me ocurren dos cosas, normalmente, con los números de línea: me molestan cuando escribo, pero los necesito cuando programo. Bueno, tampoco hay que ser exagerado: puedo vivir sin ellos, porque Emacs me muestra el número de línea en su barra, sin embargo, me gusta tenerlos a mano cuando programo (y sólo cuando programo). Pues otro hook y ya está:

(add-hook 'prog-mode-hook 'display-line-numbers-mode)

Con prog-mode-hook activa el número de línea en la mayoría de los modos de programación.

Imágenes

Dicen que una imagen vale más que mil palabras y yo pongo dos, una en modo gráfico y otra en un terminal de texto.

En modo gráfico:

tema-grafico.png

En modo texto:

tema-texto.png

Y puestas las imágenes: ni mil palabras más.

Conclusiones

No he conseguido un tema perfecto, ni siquiera bonito, pero me sirve para lo que lo quiero. Creo que no he visto nunca un theme que tenga un fondo amarillo tan horrendo. Pero no cansa tanto la vista como el fondo blanco ni es tan soso como un fondo gris claro y el resto de funcionalidades las voy sacando poco a poco.

Hay quien prefiere instalarse spacemacs que lo hace todo, pero yo prefiero enterarme de todo lo que necesito, lo que no, cómo funciona y cómo lo puedo cambiar... y en esas estoy.


Comentarios