Pregunté yo mismo la misma pregunta y no encontré ninguna solución en la web, por lo que creo que esta respuesta puede ayudar. En realidad, resulta que podemos reutilizar dir-locals-find-file
para obtener el directorio que contiene el archivo .dir-locals.el
. Así que esto es lo que he encontrado para, por ejemplo, la creación de un diccionario personal aspell dedicada a un directorio completo:
((nil . ((eval . (setq ispell-personal-dictionary
(expand-file-name
".aspell_words"
(file-name-directory
(let ((d (dir-locals-find-file ".")))
(if (stringp d) d (car d))))))))))
Además, parece que las entradas se evalúan en el orden en que se especifican, por lo que el siguiente código debería funcionar:
((nil . ((eval . (set (make-local-variable 'my-project-path)
(file-name-directory
(let ((d (dir-locals-find-file ".")))
(if (stringp d) d (car d))))))
(eval . (message "Project directory set to `%s'." my-project-path)))))
Emacs se quejará de las variables locales no seguros (debido a la construcción de eval
), sin embargo, todavía se puede marcar de forma permanente a lo seguro.
Usted no ha mencionado explícitamente, pero me pregunto si usted estaría interesado en cualquiera de los diversos " proyectos "paquetes". Por ejemplo, acabo de empezar a usar https://github.com/bbatsov/projectile; podría hacer algo de lo que quería hacer con directory-locals. – offby1