.dir-locals.elファイルの場所を基準にしてディレクトリローカル変数を設定するにはどうすればよいですか?


15

相対パスをディレクトリローカル変数として指定するように言われている状況に私はしばしば気づきます。例えばcmakeの-IDEさんcmake-ide-project-dircmake-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ファイルに関連する何かに設定したい。
フロー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.