TL; DR : वास्तव में क्या होता है, इसके बारे में find-file-noselect
आपके पास कोई नियंत्रण नहीं है, और आप बफर में सक्षम मनमाने ढंग से मामूली मोड के साथ समाप्त हो सकते हैं, यह इस बात पर निर्भर करता है कि उपयोगकर्ता अपने में सक्षम क्या है init.el
। इसके अलावा, सफाई कठिन है।
उपयोग करें with-temp-buffer
और insert-file-contents
इसके बजाय। यदि आपको बफर में विशिष्ट प्रमुख या मामूली मोड की आवश्यकता है, तो उन्हें स्पष्ट रूप से सक्षम करें । फ़ाइलों को लिखने के लिए, with-temp-file
इसके बजाय उपयोग करें , जो इसके नाम के बावजूद — आपको मनमानी फ़ाइलों को लिखने देता है।
दुष्प्रभाव
find-file-noselect
है एक बहुत , दुष्प्रभाव के सहित
- अंतःक्रियात्मक रूप से प्रश्न पूछने (कि अकेले गैर-संवादात्मक उपयोग में एक जाना है),
- स्वचालित रूप से पठनीय फ़ाइलों के लिए व्यू मोड को सक्षम करना,
- सामान्य मोड में प्रवेश करना अन्यथा,
- और चल रहा है
find-file-hook
।
सामान्य मोड ही
- स्वचालित रूप से वर्तमान बफर के लिए एक उचित प्रमुख मोड का चयन करता है,
- सभी संबंधित प्रमुख और मामूली मोड हुक चलाता है,
- और वर्तमान बफ़र, यानी फ़ाइल चर और निर्देशिका चर के लिए सभी स्थानीय चर पढ़ता है, जो फिर से असुरक्षित असुरक्षित चर के बारे में इंटरैक्टिव सवाल पूछ सकता है।
चूंकि सभी हुक चलाए जाते हैं, इसलिए आपको उपयोगकर्ता द्वारा सक्षम किए गए सभी मामूली मोड और हुक फ़ंक्शंस मिलते हैं init.el
, जो मामूली असुविधाओं (यदि अवांछनीय मामूली मोड सक्षम हैं) से लेकर प्रमुख कहर तक हो सकते हैं (यदि उपयोगकर्ता ने हुक फ़ंक्शन जोड़ा है, जो अपेक्षा करता है एक संवादात्मक संदर्भ से कहा जाता है)।
एक उदाहरण के लिए https://github.com/flycheck/flycheck/issues/366 देखें । find-file-noselect
फ्लाईकैच द्वारा एक डेटा फ़ाइल को वाक्यविन्यास-जांच के कारण प्रयोग किया जाता है, और चूंकि यह एमएसीएस शट-डाउन हो रहा था, इसलिए एक अस्थायी फ़ाइल को पीछे छोड़ते हुए, इसे ठीक से साफ करने का समय नहीं था।
साफ - सफाई
साथ find-file-noselect
बफर फिर से मारने के लिए आप अतिरिक्त सावधान रहने की जरूरत है। find-file-noselect
आपके लिए ऐसा नहीं है।
आपको किसी स्थान पर बफर को याद करने की आवश्यकता है, और unwind-protect
यह सुनिश्चित करने के लिए सावधानीपूर्वक उपयोग करें कि बफर गैर-स्थानीय निकास के मामले में भी मारा जाता है।
वैकल्पिक
फ़ाइलों को पढ़ने के लिए, उपयोग करें with-temp-buffer
और insert-file-contents
, जो केवल सबसे बुनियादी चीजें करता है, उदाहरण के लिए कोडिंग सिस्टम रूपांतरण, लेकिन सवाल नहीं पूछता है, हुक सक्षम करता है, या स्थानीय चर सेट करता है:
(with-temp-buffer
(insert-file-contents (locate-user-emacs-file "foo.el"))
;; Enter the major mode explicitly
(emacs-lisp-mode)
;; …
)
with-temp-buffer
अपने शरीर के अंत में अस्थायी बफर को ठीक से मारने का ख्याल रखता है।
फ़ाइलों को लिखने के लिए, उपयोग करें with-temp-file
, जो एक अस्थायी बफर बनाता है और उसके शरीर के अंत में दिए गए फ़ाइल नाम पर सामग्री लिखता है:
(with-temp-file (locate-user-emacs-file "foo.el")
(prin1 (list 'my 'data) (current-buffer)))
good-practices
पहले कोई टैग नहीं था ; क्या इसका उपयोग करना अच्छा विचार है?