ฉันจะตั้งค่าตัวแปรโลคัลไดเร็กทอรีได้อย่างไรเมื่อเทียบกับตำแหน่งไฟล์. 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ไฟล์
Flow
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.