Bagaimana saya bisa mengatur variabel lokal direktori relatif ke lokasi file .dir-locals.el?

15

Saya sering menemukan diri saya dalam situasi di mana saya disuruh meletakkan jalur relatif sebagai variabel direktori lokal. Misalnya cmake-ide 's cmake-ide-project-dirdan cmake-ide-build-dir. Tentu saja ini tidak terlalu portabel.

Jadi, bukannya

.dir-locals.el:

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

Saya menginginkan sesuatu seperti

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

Bagaimana saya bisa mendefinisikan variabel seperti itu directory-of-current-dir-locals-file? Dan bagaimana saya menetapkan contoh cmake-ide-build-dir, yang biasanya (concat directory-of-current-dir-locals-file "build")?

Mengalir
sumber

Jawaban:

7

Solusi saya sejauh ini (berdasarkan jawaban Stackoverflow ini ):

.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")))
         )))
Mengalir
sumber
4
Anda dapat menggunakan juga(locate-dominating-file default-directory ".dir-local.el")
ibizaman
0

Anda dapat mendefinisikan variabel dengan (defvar directory-of-current-dir-locals-file "/home/user/code/project").

Konstantin Morenko
sumber
2
Maaf mungkin pertanyaan saya tidak jelas. Tapi idenya adalah untuk tidak menggunakan jalur absolut. Karena Anda tahu Anda ingin mengatur variabel ke sesuatu yang relatif ke .dir-locals.elfile.
Aliran