Por si no había suficiente flexibilidad en la configuración general también nos encontramos con la figura de la configuración local. Básicamente consiste en meter un fichero llamado .dir-locals.el en el directorio de trabajo. Eso afectará a la configuración de todos los ficheros que se encuentren en el directorio y los subdirectorios que cuelguen de él. ¿Para qué? Pues a veces ocurre que necesitas cambiar los parámetros básicos tal y como te gustan a ti, para un proyecto en particular.

Pongo dos ejemplos que me han ocurrido y donde la configuración local me ha venido a salvar los trastos. En el primer caso se trataba de un proyecto de programación y se acordó entre los participantes que el código debía utilizar tabuladores de ancho 4 . Yo siempre utilizo espacios y resultaría muy cansino cambiar la configuración general de emacs cada vez que me ponía a programar. La solución fue meter en el directorio raíz del proyecto un fichero .dir-locals.el con el siguiente contenido:

((nil (fill-column . 80)) (c-mode (indent-tabs-mode .t) (tab-stop . 4)))

Se puede apreciar que lo que contiene un fichero de configuración local viene a ser un listado de variaciones para cada modo mayor que se necesite. Cada uno de esos modos contiene una lista de nombres de variables y sus valores para el proyecto. También se puede especificar nil para el modo, lo que hará que se aplique en todos los modos activados en ese directorio.

En este caso el cambio en la configuración venía impuesta por el equipo de trabajo. Pero en el siguiente, la imposición venía de una herramienta.

Alguna vez he contado que para traducir textos utilizo una herramienta en Java que facilita la gestión de ese trabajo. El tema es que esa herramienta no reconoce la extensión .org como fichero que pueda trabajar y tuve que renombrar los todos los ficheros de un proyecto a la extensión .txt , pero así, cuando los abría con emacs los habría en modo Fundamental en lugar de org-mode . La solución como lo podéis imaginar fue crear un fichero en el directorio de fuentes. Al tener la extensión .el y estar oculto, OmegaT no lo reconoce para trabajarlo en la traducción, pero lo copiará al directorio de ficheros traducidos porque interpreta que es parte del proyecto.

;;; Directory Local Variables ;;; For more information see (info "(emacs) Directory Variables") ((org-mode (fill-column . 75) (eval . (org-show-all))) (text-mode (mode . org)))

Viendo el código podéis suponer que emacs tiene alguna manera de insertar las variables en ese fichero de forma más o menos automática sin tener que recordar la sintaxis de la lista de listas y lo hay: add-dir-local-variable . Preguntará por un modo, luego por una variable y al final por un valor. Por supuesto, también encontraréis su contrario delete-dir-local-variable .