Come posso impostare la variabile locale della directory in relazione alla posizione del file .dir-locals.el?


15

Mi trovo spesso nella situazione in cui mi viene detto di inserire percorsi relativi come variabili locali della directory. Ad esempio cmake-ide 's cmake-ide-project-dire cmake-ide-build-dir. Naturalmente questo non è molto portatile.

Quindi invece di

.dir-locals.el:

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

Voglio qualcosa del genere

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

Come posso definire una tale variabile directory-of-current-dir-locals-file? E come impostare, ad esempio cmake-ide-build-dir, che è in genere (concat directory-of-current-dir-locals-file "build")?

Risposte:


7

La mia soluzione finora (basata su questa risposta 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")))
         )))

4
Puoi anche usare(locate-dominating-file default-directory ".dir-local.el")
ibizaman il

0

È possibile definire la variabile con (defvar directory-of-current-dir-locals-file "/home/user/code/project").


2
Scusa forse la mia domanda non era chiara. Ma l'idea era di non usare percorsi assoluti. Dal momento che sai che vuoi impostare la variabile su qualcosa rispetto al .dir-locals.elfile.
Flusso
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.