निर्देशिका-स्थानीय चर को पुनः लोड करना


27

आप निर्देशिका-स्थानीय चर को कैसे पुनः लोड करते हैं? मैं .dir-locals.elवर्तमान एमएसीएस सत्र में इस तरह के बदलावों को संशोधित करना चाहता हूं ।


3
निर्देशिका-स्थानीय चर सत्र पर लागू नहीं होते हैं - वे उस निर्देशिका में एक फ़ाइल से संबंधित हर बफर पर लागू होते हैं। तो, एक दृष्टिकोण, यदि आप अपने खुले बफ़र्स को पुनः प्राप्त करने के साथ ठीक हैं, तो बस के माध्यम से चलकर, उन सभी को वापस करना होगा buffer-list
प्रधान

@ प्रधान: यद्यपि मैं अधिक प्रत्यक्ष दृष्टिकोण को अपनाना चाहूंगा, आपके सुझाव ने काम किया। धन्यवाद।
एलेना

3
@ प्रधान मैं गलत था: बफर को काम करना तब तक काम नहीं करता है, जब तक कि स्थानीय चर को सुरक्षित के रूप में पंजीकृत नहीं किया गया हो।
एलेना

जवाबों:


21

यह फ़ंक्शन dir-locals फ़ाइल को फिर से पढ़ेगा और वर्तमान बफ़र के लिए नए मान सेट करेगा:

(defun my-reload-dir-locals-for-current-buffer ()
  "reload dir locals for the current buffer"
  (interactive)
  (let ((enable-local-variables :all))
    (hack-dir-local-variables-non-file-buffer)))

और यदि आप अपने वर्तमान बफ़र की निर्देशिका में प्रत्येक बफ़र के लिए dir-locals पुनः लोड करना चाहते हैं:

(defun my-reload-dir-locals-for-all-buffer-in-this-directory ()
  "For every buffer with the same `default-directory` as the 
current buffer's, reload dir-locals."
  (interactive)
  (let ((dir default-directory))
    (dolist (buffer (buffer-list))
      (with-current-buffer buffer
        (when (equal default-directory dir))
        (my-reload-dir-locals-for-current-buffer)))))

आपके पास after-save-hook.dir-locals.el बफ़र जोड़कर dir-locals फ़ाइल सहेजने पर सभी dir स्थानीय लोगों को ताज़ा किया जा सकता है ।

(add-hook 'emacs-lisp-mode-hook
          (defun enable-autoreload-for-dir-locals ()
            (when (and (buffer-file-name)
                       (equal dir-locals-file
                              (file-name-nondirectory (buffer-file-name))))
              (add-hook (make-variable-buffer-local 'after-save-hook)
                        'my-reload-dir-locals-for-all-buffer-in-this-directory))))

बेशक इसके अनपेक्षित परिणाम हो सकते हैं, क्योंकि यह चर मानों को रीसेट कर देगा चाहे वे कहीं और बदले गए हों, इसलिए अपने जोखिम पर उपयोग करें।


5
मुझे लगभग ऐसा लग रहा है कि इसे Emacs में बनाया जाना चाहिए।
PythonNut

3

आप भी उपयोग कर सकते हैं: M-: (hack-dir-local-variables-non-file-buffer)


यह जांचने के लिए काम करता है : एक बफर (उदाहरण के लिए एक ऑर्ग मोड फ़ाइल) से, टाइप करें M-x add-dir-local-variable, फिर वैलिडेट (डिफ़ॉल्ट ऑर्ग-मोड), फिर डेमो आरईटी टाइप करें, फिर "यह एक डेमो है" आरईटी।

आपकी .dir-locals.el फ़ाइल एक बफर में दिखाई देगी:

;;; Directory Local Variables
;;; For more information see (info "(emacs) Directory Variables")

((org-mode
  (demo . "this is a demo")))

आपको इसे सहेजना होगा: C-x C-s

फिर अपने ओर्ग मोड मोड पर वापस जाएं और जांचें कि डेमो वेरिएबल परिभाषित नहीं है ( C-h C-v demo)

यहां आप ट्रिक का उपयोग कर सकते हैं: M-: (hack-dir-local-variables-non-file-buffer)

अब C-h C-v demoछपेगा:

डेमो का मान "यह एक डेमो है" बफर poub.org में स्थानीय; विश्व स्तर पर शून्य

यह चर का मान निर्देशिका-स्थानीय है, जिसे
'/home/picaud/Temp/.dir-locals.el' फ़ाइल द्वारा सेट किया गया है ।

प्रलेखन: एक चर के रूप में प्रलेखित नहीं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.