¿Cómo puedo establecer la variable local del directorio en relación con la ubicación del archivo .dir-locals.el?


15

A menudo me encuentro en una situación en la que me dicen que coloque rutas relativas como variable local del directorio. Por ejemplo cmake-ide 's cmake-ide-project-diry cmake-ide-build-dir. Por supuesto, esto no es muy portátil.

Entonces en lugar de

.dir-locals.el:

((nil . ((cmake-ide-project-dir . "/home/user/code/project"))))

Quiero algo como

((nil . ((cmake-ide-project-dir . directory-of-current-dir-locals-file))))

¿Cómo puedo definir tal variable directory-of-current-dir-locals-file? ¿Y cómo establecería, por ejemplo cmake-ide-build-dir, que es típicamente (concat directory-of-current-dir-locals-file "build")?

Respuestas:


7

Mi solución hasta ahora (basada en esta respuesta de Stackoverflow ):

.dir-locals.el:

;;; Directory Local Variables
;;; For more information see (info "(emacs) Directory Variables")

((nil . ((eval . (set (make-local-variable 'my-project-path)
                      (file-name-directory
                       (let ((d (dir-locals-find-file ".")))
                         (if (stringp d) d (car d))))))
         (cmake-ide-project-dir . my-project-path)
         (eval . (setq cmake-ide-build-dir (concat my-project-path "build")))
         )))

44
Puedes usar también(locate-dominating-file default-directory ".dir-local.el")
ibizaman

0

Se podría definir variable con (defvar directory-of-current-dir-locals-file "/home/user/code/project").


2
Lo siento, tal vez mi pregunta no estaba clara. Pero la idea era no usar caminos absolutos. Como sabe que desea establecer la variable en algo relativo al .dir-locals.elarchivo.
Flujo
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.