Як я можу встановити локальну змінну каталогів щодо розташування файлу .dir-locals.el?


15

Я часто опиняюся в ситуації, коли мені кажуть ставити відносні шляхи як локальну змінну каталогів. Наприклад, cmake-ide 's cmake-ide-project-dirі cmake-ide-build-dir. Звичайно, це не дуже портативно.

Тож замість

.dir-locals.el:

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

Я хочу щось подібне

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

Як я можу визначити таку змінну directory-of-current-dir-locals-file? І як би я встановив, наприклад cmake-ide-build-dir, що зазвичай (concat directory-of-current-dir-locals-file "build")?

Відповіді:


7

Моє рішення поки що (на основі цієї відповіді 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
Можна також скористатися(locate-dominating-file default-directory ".dir-local.el")
ibizaman

0

Ви можете визначити змінну за допомогою (defvar directory-of-current-dir-locals-file "/home/user/code/project").


2
Вибачте, можливо, моє запитання було незрозумілим. Але ідея полягала в тому, щоб не використовувати абсолютних шляхів. Оскільки ви знаєте, що хочете встановити змінну на щось відносно .dir-locals.elфайлу.
Потік
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.