ho chiesto io stesso la stessa domanda e non ho trovato alcuna soluzione sul web, quindi penso che questa risposta possa aiutare. In realtà, è possibile riutilizzare dir-locals-find-file
per ottenere la directory contenente il file .dir-locals.el
. Quindi, ecco cosa ho trovato per, ad esempio, la creazione di un dizionario personale aspell dedicato ad un intera directory:
((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))))))))))
Inoltre, a quanto pare le voci sono valutate nell'ordine in cui sono specificate, in modo che il codice seguente dovrebbe funzionare:
((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 si lamenterà di variabili locali non sicuri (a causa della eval
costrutto), ma si può ancora permanentemente segnare sul sicuro.
Lei non ha menzionato esplicitamente, ma mi chiedo se si sarebbe interessato a uno dei vari " progetto "pacchetti. Ad esempio, ho appena iniziato a utilizzare https://github.com/bbatsov/projectile; potrebbe fare qualcosa di quello che volevi fare con i locatori di directory. – offby1