आप Emacs की स्रोत फ़ाइलों को केवल डिफ़ॉल्ट रूप से पढ़ने के लिए निर्देशिका-स्थानीय चर का उपयोग कर सकते हैं । (यह भी देखें C-hig (emacs) Directory Variables
RET)।
.dir-locals.el
निम्नलिखित सामग्री के साथ आप जिस निर्देशिका वृक्ष की रक्षा करना चाहते हैं, उसके मूल में एक फ़ाइल बनाएँ :
((nil . ((eval . (view-mode 1)))))
संपादित करें: मिचेल पोलित्स्की टिप्पणियों में बताते हैं कि view-mode
इस तरह से सक्षम करना समस्याग्रस्त है, क्योंकि जब आप qइसके साथ बफर को खारिज करते हैं, तो यह भी मोड को निष्क्रिय कर देता है, जिसका अर्थ है कि अगली बार जब आप उस बफर view-mode
को सक्षम नहीं करेंगे।
संपादित 2: कॉन्स्टेंटाइन ने नीचे दी गई टिप्पणियों में उस समस्या का समाधान प्रदान किया है:
((nil . ((eval . (when buffer-file-name (view-mode-enter nil #'kill-buffer))))))
यह उपयोगी रूप से यह सुनिश्चित करने के लिए एक परीक्षण जोड़ता है कि बफर पहले से ही एक फ़ाइल का दौरा कर रहा है, लेकिन महत्वपूर्ण परिवर्तन view-mode-enter
इसके बजाय का उपयोग है view-mode
, क्योंकि पूर्व एक EXIT-ACTION
तर्क लेता है जो निर्धारित करता है कि qटाइप करने के लिए क्या करना है। इस मामले में बाहर निकलने की कार्रवाई बफर को मारने के लिए है, यह सुनिश्चित करते हुए कि अगली बार जब फ़ाइल का दौरा किया जाता है तो यह फिर से समाप्त हो जाएगा view-mode
।
संपादित करें 3: उस रास्ते का अनुसरण करते हुए, हम यह भी देख सकते हैं कि निर्दिष्ट EXIT-ACTION
अंत में view-mode-exit
फ़ंक्शन को पारित कर दिया गया है, और इसका डॉकस्ट्रिंग हमें एक वैकल्पिक विकल्प प्रदान करता है:
view-no-disable-on-exit is a variable defined in `view.el'.
Its value is nil
Documentation:
If non-nil, View mode "exit" commands don't actually disable View mode.
Instead, these commands just switch buffers or windows.
This is set in certain buffers by specialized features such as help commands
that use View mode automatically.
इसलिए हम निम्नलिखित का उपयोग कर सकते हैं:
((nil . ((eval . (when buffer-file-name
(setq-local view-no-disable-on-exit t)
(view-mode-enter))))))
मैं वैकल्पिक दृष्टिकोण का उपयोग करता हूं जिसे आप अपनी इनिट फ़ाइल में पूरी तरह से निर्दिष्ट कर सकते हैं (जैसा कि .dir-locals.el
फ़ाइल बनाने के विपरीत ), और मैं केवल फ़ाइलों का उपयोग करने के बजाय केवल पढ़ने के लिए करता हूं view-mode
। मेरा विन्यास इस तरह दिखता है:
;; Emacs
(dir-locals-set-class-variables
'emacs
'((nil . ((buffer-read-only . t)
(show-trailing-whitespace . nil)
(tab-width . 8)
(eval . (whitespace-mode -1))))))
(dir-locals-set-directory-class "/usr/local/src/emacs" 'emacs)
(dir-locals-set-directory-class "/usr/local/share/emacs" 'emacs)
(dir-locals-set-directory-class "/usr/share/emacs" 'emacs)
जाहिर है आप अपने elpa निर्देशिका के लिए एक ही काम कर सकते हैं, और किसी भी अन्य निर्देशिका जिसमें तृतीय-पक्ष स्रोत कोड होता है।
emacs-lisp-mode
हूं औरC-x C-q
अगर मैं स्रोत कोड को संपादित करना चाहता हूं तो मैं बस करता हूं।(defun set-buffer-read-only () (setq buffer-read-only t)) (add-hook 'emacs-lisp-mode-hook 'set-buffer-read-only)