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.
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
Esta obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial 4.0 Internacional.
Notas al pie de página:
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».