Cuaderno de GNUtas

Crear un archivo de inicio para Emacs desde Org

Al profesor Donald Ervin Knuth (padre, entre otras muchas maravillas, del sistema de composición tipográfica digital TeX) le debemos el feliz hallazgo del término «programación literaria», que consiste en escribir programación de tal forma que el código se entreteja con su propia documenación. Ésta será generada por aquél a lo largo del procedimiento, y hablaremos entonces de un código «autodocumentado», donde por una parte obtendremos el código fuente propiamente dicho; por otra, la documentación de ese código, con bella tipografía (por supuesto, gracias a TeX) y por eso perfectamente inteligible para un ser humano1.

Sin llegar a los extremos de la —digamos— «programación de altos vuelos», podemos también beneficiarnos de este concepto en nuestros trasteos cotidianos y mundanos gracias al Org Mode de GNU Emacs, que incorpora muchas y variadas funcionalidades para facilitar tales menesteres. Seremos capaces, por ejemplo y sin ir más lejos, de mantener organizados y documentados todos nuestros archivos de configuración a través de ficheros Org, con la ventaja sináptica que ello conlleva (añadir enlaces, notas variadas, jerarquía de encabezados y sub-árboles, etc.); y siempre que lo precisemos obtendremos los ficheros necesarios, ubicados en el lugar correcto. Aquí me limitaré a explicar cómo hago yo para gestionar mi archivo de configuración general de Emacs desde Org Mode, algo que me resulta increíblemente cómodo y práctico, además de que me ahorra no poco tiempo y quebraderos de cabeza. Pero antes convendría una breve explicación de cómo Org entiende y lleva a cabo esta forma de escribir código.

La base: tangle

Tangle es el nombre con que en Org se conoce la acción de extraer el contenido de uno (o varios) bloques de código y de generar con ese material los ficheros necesarios que incorporen el tipo de extensión según el lenguaje de código. Naturalmente, podemos controlar muchos parámetros a nivel global o ajustados a cada bloque: el nombre del archivo resultante (por defecto, será el mismo que el del archivo *.org contenedor, pero con la nueva extensión), el directorio donde se ubicará, si exportamos el contenido de nuestro documento Org como comentarios al código generado, etc.

La acción org-babel-tangle (C-c C-v t) se ejecuta sobre la totalidad de nuestro fichero Org, y rastreará todos los bloques de código que éste contenga. Pero para que sean debidamente «entrelazados», debemos añadir el header-argument :tangle yes o :tangle nombre-de-archivo-resultante (si queremos que sea uno distintinto al de nuestro *.org), ya que esta funcionalidad no viene activa por defecto. Si todos los bloques que tenemos en el archivo pertenecen a un mismo lenguaje de programación, se creará un sólo fichero fuente. Si deseamos evitar la inclusión de algún bloque, simplemente indicaremos el header-argument :tangle no en su lugar correspondiente. Para lo que aquí nos ocupa, la creación de un archivo de configuración de Emacs, partiremos de un único archivo Org.

Creando nuestro archivo de configuración

En principio, es indiferente qué nombre le demos y dónde ubicarlo, aunque por convención no estaría de más situarlo en el directorio ~/.emacs.d/. Podemos, también, albergarlo en un repositorio Git y crear un archivo simbólico que apunte a él. Eso ya al gusto de cada cuál. En cuanto al nombre, el mío se llama mi-emacs-conf.org, y sólo consta de esta simple cabecera:

#+TITLE:Archivo de configuración general para Emacs
#+AUTHOR: Juan Manuel Macías
#+PROPERTY: header-args :tangle yes :comments org

Las dos primeras líneas también son por seguir la convención. La que realmente tiene efecto es la tercera, donde añado dos header-arguments a nivel global: la activación de la propiedad tangle y la que pasa el contenido textual de mi documento Org a comentarios en el archivo fuente de salida. A partir de ahí, sólo queda ir escribiendo como en cualquier otro archivo Org, con nuestros habituales encabezados y sub-encabezados, texto, enlaces, notas al pie, etc. Si se nos antoja, podemos meter hasta un poema. Lo importante, claro, es ir entreverando aquí y allá los bloques de código que precisamos. Podemos también añadir lemas TODO a nuestros encabezados, algo muy práctico para código por añadir o aquél que aún se encuentra en fase de trasteo. Nos quedará, en fin, un documento bastante legible y, sobre todo, ordenado y navegable (el aspecto que tiene el mío se puede apreciar en la fig. 1).

Ahora bien, hemos dicho más arriba que para generar el archivo de configuración (en este caso, se generará uno en el mismo directorio con el nombre de nuestro documento Org y la extensión *.el), es necesario invocar la función org-babel-tangle. ¿Tenemos que hacerlo cada vez que añadamos contenido a nuestro archivo Org o lo modifiquemos? Veremos en el siguiente apartado que podemos desentendernos sin problemas de eso.

emacs_conf.png

Figura 1: Mi archivo Org de configuración para Emacs

Generación automática de nuestro archivo de configuración

Para que esto sea posible, debemos conservar un archivo ~/.emacs, pero esta vez con un contenido mínimo. Basta con que se incluyan allí las siguientes líneas2 (la primera es necesaria si usamos package.el como gestor de paquetes y actualizaciones):

(package-initialize)

(setq custom-file "~/.emacs.d/mi-emacs-conf.el")
(when (file-exists-p custom-file) (load custom-file))

(require 'org)
(org-babel-load-file
 (expand-file-name "mi-emacs-conf.org"
		   user-emacs-directory))

Una vez hecho esto, Org-Babel regenerará nuestro archivo de configuración mi-emacs-conf.el cada vez que iniciemos Emacs.

Publicado: 30/07/2019

Última actualización: 30/07/2019


Índice general

Acerca de...

Esta obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial 4.0 Internacional.

Notas:

1

El propio Knuth explicó todo esto de una forma meridiana y, por qué no, literaria: «Te ves a ti mismo escribiendo para un ser humano, explicándole a un ser humano lo que una computadora debe hacer, en lugar de pensar en ti como el que habla a la computadora y le dice lo que debe hacer».

2

Tal y como se explica (estupendamente) en este hilo.

© Juan Manuel Macías
Creado con esmero en
GNU Emacs