मैं .dir-locals.el फ़ाइल स्थान के सापेक्ष निर्देशिका को स्थानीय चर कैसे सेट कर सकता हूं?


15

मैं अक्सर खुद को उस स्थिति में पाता हूं, जहां मुझे कहा जाता है कि निर्देशिका को स्थानीय चर के रूप में रिश्तेदार पथ डाल दें। उदाहरण के लिए cmake-आईडीई 'एस 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

मेरा अब तक का समाधान ( इस स्टैकओवरफ़्लो उत्तर पर आधारित ):

.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 Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.