Làm cách nào tôi có thể đặt biến cục bộ thư mục liên quan đến vị trí tệp .dir-locals.el?


15

Tôi thường thấy mình trong tình huống tôi được yêu cầu đặt các đường dẫn tương đối làm biến cục bộ của thư mục. Ví dụ cmake-ide 's cmake-ide-project-dircmake-ide-build-dir. Tất nhiên điều này không phải là rất di động.

Vì vậy, thay vì

.dir-locals.el:

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

Tôi muốn một cái gì đó như

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

Làm thế nào tôi có thể định nghĩa một biến như vậy directory-of-current-dir-locals-file? Và làm thế nào tôi sẽ thiết lập ví dụ cmake-ide-build-dir, thường là (concat directory-of-current-dir-locals-file "build")gì?

Câu trả lời:


7

Giải pháp của tôi cho đến nay (dựa trên câu trả lời Stackoverflow này ):

.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
Bạn cũng có thể sử dụng(locate-dominating-file default-directory ".dir-local.el")
ibizaman

0

Bạn có thể định nghĩa biến với (defvar directory-of-current-dir-locals-file "/home/user/code/project").


2
Xin lỗi có lẽ câu hỏi của tôi không rõ ràng. Nhưng ý tưởng là không sử dụng đường dẫn tuyệt đối. Vì bạn biết bạn muốn đặt biến thành một cái gì đó liên quan đến .dir-locals.eltệp.
Lưu lượng
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.