Configuración de Emacs paso a paso (01)
Primera entrega: Como organizar los ficheros de configuración.
En esta serie de artículos describiré mi configuración del editor Emacs (concretamente GNU Emacs) paso a paso.
Llevo años usando Emacs en el trabajo, pero sin haber profundizado demasiado en su estudio. Cuando tenía una necesidad buscaba una solución en la red y retocaba mi fichero de configuración a toda prisa. Funcionaba, pero mi configuración era un pastiche infumable.
Gracias a las referencias que pongo al final del artículo, y en especial a la serie de videos del señor Zamansky (C’est la Z) he organizado mi fichero de configuración y añadido bastantes cosas nuevas que no conocía.
En este primer artículo dejaremos lista una configuración basica separada en dos ficheros. El fichero ~/.emacs.d/init.el
rara vez volveremos a tocarlo y toda la configuración la haremos en el fichero ~/.emacs.d/myinit.org
.
Avisos
Si ya estás usando Emacs haz un backup de tu configuración antes de enredar con ella. O mejor aún, controla tus ficheros de configuración con git.
Solo uso Linux, antes usaba Windows en el trabajo pero ahora uso Linux para todo, si usas Windows o Mac es posible que tengas que adaptar cosas para tu S.O.
Ficheros de configuración
Lo que nos proponemos es controlar toda la configuración de nuestro editor con dos ficheros:
~/.emacs.d/init.el
- Contiene la configuración mínima de Emacs: las secciones que Emacs completa automáticamente, la declaración de las fuentes de paquetes y la configuración inicial de la gestión de paquetes de nuestro editor.
~/.emacs.d/myinit.org
- Contiene toda nuestra configuración organizada en un fichero org-mode
init.el
y myinit.org
en el directorio ~/.emacs.d
.
¡Ojo! esto hará que pierdas tu configuración previa.Si tenemos nuestro editor Emacs recién instalado no tendremos ningún fichero de configuración en nuestro directorio $HOME
.
Podemos hacer un pequeño cambio de configuración y salvar nuestras opciones:
- Menú: Options → Set Default Font: Aumentamos el tamaño del tipo de fuente a 14 puntos por ejemplo
- Menu: Options → Save Options: Salvamos nuestras opciones
Emacs salvará las opciones en el fichero ~/.emacs
que tendrá el siguiente contenido:
(custom-set-variables
;; custom-set-variables was added by Custom.
;; If you edit it by hand, you could mess it up, so be careful.
;; Your init file should contain only one such instance.
;; If there is more than one, they won't work right.
)
(custom-set-faces
;; custom-set-faces was added by Custom.
;; If you edit it by hand, you could mess it up, so be careful.
;; Your init file should contain only one such instance.
;; If there is more than one, they won't work right.
'(default ((t (:family "DejaVu Sans Mono" :foundry "PfEd" :slant normal :weight normal :height 143 :width normal)))))
Este es nuestro primer fichero de configuración. El fichero está escrito en elisp, una variante del lenguaje LISP que usa Emacs.
No debemos tocar las dos secciones que aparecen en el fichero, estas secciones las manipula automáticamente el editor y no deberíamos enredar con ellas sin saber muy bien lo que hacemos. A pesar de esta advertencia te voy a proponer un cambio en la sección custom-set-faces
para nuestro fichero init.el
definitivo. En mi instalación de Emacs no se resaltaba la region (el texto selecionado en Emacs se llama region) Si te pasa lo mismo te propongo que cambies la sección custom-set-faces
por la siguiente:
(custom-set-faces
;; custom-set-faces was added by Custom.
;; If you edit it by hand, you could mess it up, so be careful.
;; Your init file should contain only one such instance.
;; If there is more than one, they won't work right.
'(default ((t (:family "DejaVu Sans Mono" :foundry "PfEd" :slant normal :weight normal :height 143 :width normal))))
'(region ((t (:background "light sea green" :distant-foreground "gtk_selection_fg_color")))))
Emacs puede leer su configuración inicial de este fichero ~/.emacs
y alternativamente puede usar el fichero ~/.emacs.d/init.el
. En el directorio ~/.emacs.d/
vamos a tener otros ficheros a medida que vayamos completando la configuración de nuestro editor. A mi me parece más limpio tener toda la configuración de Emacs en este directorio. Así que simplemente movemos/renombramos el fichero ~/.emacs
a la nueva ubicación ejecutando:
|
|
Cerramos nuestro editor Emacs y volvemos a abrirlo para comprobar que lee correctamente el fichero de configuración ~/.emacs.d/init.el
(deberíamos ver el tipo de letra de 14 puntos)
Ficheros de configuración propuestos
myinit.org
Antes de nada vamos a crear el fichero ~/.emacs.d/myinit.org
para que no de error la carga del init.el
. Lo crearemos con un contenido mínimo:
#+startup: overview
* Interface tweaks
** Some GUI optimizations
#+begin_src emacs-lisp
(setq inhibit-startup-message t) ; Eliminate FSF startup msg
#+end_src
El fichero solo tiene una linea de configuración para Emacs (la linea resaltada) que inhibe la pantalla de arranque del editor.
Este fichero está escrito en org-mode
, lo hacemos así por que a medida que avancemos verás que queda mucho más limpio y fácil de entender. En esta serie no vamos a entrar en detalles de org-mode
pero puedes investigar por tu cuenta. org-mode es una herramienta potentísima y por si solo ya sería una buena razón para usar Emacs
init.el
Ahora modificamos nuestro fichero ~/.emacs.d/init.el
. Vamos a añadir dos secciones: una que configura la instalación de paquetes y una sección que se encarga de leer el resto de la configuración desde el fichero myinit.org
.
El fichero init.el
definitivo es el siguiente:
|
|
En las lineas 18-25 configuramos los depósitos de paquetes para Emacs en internet. Hay tres depósitos principales de paquetes para Emacs:
- GNU Elpa
- El depósito oficial de Emacs
- Melpa
- Un depósito alternativo con muchos más paquetes que el oficial, y con actualizaciones más frecuentes
- Marmalade
- Era otro depósito alternativo, pero está inactivo desde hace tiempo.
En las lineas 28-30 instalamos (si no está instalado previamente) nuestro primer paquete para Emacs: use-package
.
use-package es un paquete para gestionar la instación y configuración de paquetes en Emacs, una verdadera joya. Los ficheros de configuración quedan simplificados, limpios y claros.
Por último en la linea 34 cargamos nuestro fichero myinit.org
.
Con esto hemos terminado de configurar nuestro fichero ~/.emacs.d/init.el
, es posible que no tengamos que volver a tocarlo nunca.
Ahora si detenemos nuestro Emacs y volvemos a arrancarlo veremos (abajo de todo, en la linea de estado) que Emacs se conecta a internet, descarga el paquete use-package
y procede a instalarlo.
init.el
veremos que Emacs mantiene una lista con los paquetes instalados. No debemos editarlaDependiendo de la versión de Emacs que estés utilizando puede que veas un error de GPG por no poder verificar la firma de los paquetes de Elpa. De hecho ningún paquete de Elpa estará disponible para instalación. Lo solucionaremos en la siguiente sección.
Ampliando la configuración
Vamos a completar la configuración inicial en el fichero ~/.emacs.d/myinit.org
En este paso vamos a introducir muchos pasos de golpe. No vamos a detallar todos, puedes ver los comentarios en el propio fichero y eliminar (o comentar) los cambios que no te convenzan.
Ya comentamos que el fichero está escrito usando org-mode. Las secciones en org-mode se marcan con uno o varios asteriscos y se puede plegar y desplegar en Emacs pulsando tabulador en el título de la sección.
La primera linea (linea 1) del fichero es un preamble de org_mode para indicar como debe presentar las secciones desplegadas al abrir el fichero.
Del resto de lineas, lo único que Emacs interpretará como comandos de configuración son las partes encerradas entre indicadores begin_src y end_src el resto, los títulos de sección y los textos añadidos, son solo para organizar el fichero de configuración y dar aclaraciones.
Las primeras secciones hasta la linea hasta la linea 52 hacen ajustes variados al interfaz de usuario, fijan la codificación preferida a utf-8
, establecen algunos atajos de teclado útiles (por ejemplo esc-esc-c cargará este fichero myinit.org
en el editor), y hacen que el realzado de sintaxis esté activado por defecto.
A partir de ahí definimos tres funciones en elisp y les asignamos un atajo de teclado.
Kill Buffer Quick de las lineas 53 a la 64 define una función para matar el buffer (fichero) que estamos editando sin tener que recorrer todo el diálogo por defecto en Emacs y lo asocia a Ctrl-Supr
Wonderful Bubble Buffer Mantiene un listado de ficheros recientes por el que podemos movernos con la tecla F8 (cuando visitamos un buffer asciende en la lista como una burbuja) Siempre puedes moverte normalmente por los buffers abiertos con Shift-PgUp y Shift-PgDown que definimos en la sección de Shortcuts
parent matching with % Nos permite saltar al parentesis asociado con el que señale el cursor sin más que pulsar % (imitando a otros editores como Vim)
A continuación tenemos una seccion dedicada a use-package en esta sección solucionamos el error de las nuevas claves GPG de Elpa instalando un paquete con las nuevas claves (para lo cual desactivamos un momento la verificación de claves). E instalamos otro paquete que nos permitirá especificar en el futuro si hay paquetes de sistema que sean dependencias necesarias para nuestras ampliaciones de Emacs. Además instalamos try para poder probar paquetes Emacs sin tocar la configuración ni afectarla con la prueba.
Por último, y adelantándonos un poco a los acontecimientos, añadimos una sección para la configuración de org-mode e instalamos org-bullets, una vez instalado este paquete verás que el fichero myinit.org
se ve de otra manera en Emacs.
|
|
Ficheros para descargar
Los ficheros descritos: init.el
y myinit.org
puedes descargarlos desde este enlace
Los ficheros están almacenados en https://gitlab.com/comacero/emacs_conf_step e irán ampliándose a medida que publiquemos esta serie.