एक आलसी init एक अच्छा init है।
(IMO)
कब इस्तेमाल करें with-eval-after-load
with-eval-after-loadभरी हुई है एक बार जब कोई खास सुविधा या फ़ाइल है पहले , भरी हुई तो एक कीमैप-परिवर्तन स्पष्ट रूप से अंदर इनमें से किसी एक हो जाता है। कम से कम नहीं क्योंकि कीमैप को init-time [कुछ ऐसा प्रयास करें ] (define-key message-mode-map (kbd "C-c f") 'Footnote-add-footnote)में नहीं जाना जा सकता है emacs -q। एक हुक एक अच्छा समाधान नहीं है क्योंकि यह एक कुंजी को हर बार हुक शुरू होने पर बांधता है। के रूप में tarsius नोट, आप कर सकते हैं और अधिक पढ़ क्यों के बारे में नहीं करने के लिए local-set-keyहुक में।
अंत में, ध्यान दें कि with-eval-after-loadGNU Emacs 24.4 एक 2 लाइन आवरण है, eval-after-loadजहाँ पर bodyउद्धृत नहीं किया जाना चाहिए।
जब हुक का उपयोग करें
हुक हर बार एक मानदंड पूरा होने पर लोड किए गए कार्यों की सूची है, उदाहरण के लिए एक निश्चित मोड शुरू किया गया है। हुक का एक सामान्य उपयोग मामूली-मोड को लोड करना है, जैसे कि flyspell-modeया hl-line-mode। जैसे (add-hook 'org-agenda-mode-hook 'hl-line-mode)। जैसा कि रमी बताते हैं, add-hooksस्मार्ट है और सही काम करेगा भले ही हुक-वेरिएबल अभी तक लोड किया गया हो। फिर भी, मेरे पास निम्न की तरह कई खंड हैं, जो गति-लाभ के लिए नगण्य हो सकते हैं, लेकिन संगठन और निर्भरता-संरचना की भावना देता है:
(with-eval-after-load 'org-agenda
(add-hook 'org-agenda-mode-hook 'hl-line-mode))
हुक जोड़ने के बाद क्यों org-agenda? हमेशा की तरह, C-h v org-agenda-mode-hook C-jउद्धार करता है। हुक org-agenda.elमें दिखाया गया है के रूप में परिभाषित किया गया है *help*।
अतिरिक्त सुविधाएं लोड हो रही हैं with-eval-after-load
with-eval-after-loadअतिरिक्त सुविधाओं को लोड करने के लिए भी महत्वपूर्ण है। आप शायद कुछ चाहते हैं कि (with-eval-after-load 'org (require 'org-inlinetask))ओर्ग इनलाइनसेट को लोड करना पसंद करें। क्यों देखना है (find-library "org-inlinetask")। चूंकि org-inlinetasks.elसीधे तौर पर (require 'org), सभी अच्छे हैं autoloadकि आपके मित्र Emacs के रख-रखावकर्ताओं ने बहुत सावधानी बरती है और उन्हें "अनदेखा" org.el(c)किया जाएगा।
लेकिन क्या होगा यदि आपके (व्यक्तिगत) defunकई स्थानों की आवश्यकता है? यदि आप वास्तव में योग्य हैं, तो आप defuns को अपनी फ़ाइल में किसी अन्य फ़ाइल में रख सकते हैं load-pathऔर autoloadकुकीज़ जोड़ सकते हैं, या आप Emacs को बता सकते हैं कि फ़ंक्शन को फ़ंक्शन के साथ कहाँ ढूंढना है autoload। फिर कुछ इस तरह काम करेगा:
(autoload 'org-cdlatex-mode "org" "cdlatex mode from org.")
(with-eval-after-load "latex"
(add-hook 'TeX-mode-hook 'org-cdlatex-mode))
या आप बस require orgइसे बदले में खींच सकते हैंcdlatex
और, ईमानदारी से, व्यक्तिगत डिफॉन ज्यादातर समय के लिए इनट टाइम के लिए ज्यादा मायने नहीं रखता है। व्यक्तिगत दोषों की 1150 पंक्तियाँ (84 अवगुण) मेरे init.elवनिला एमएसीएस से 0.02 से अधिक हैं।
आरंभीकरण समय मापने
घुसपैठ के समय को अनुमानित करने का एक आसान तरीका है
time emacs --eval "(kill-emacs)"
(के खिलाफ बेंचमार्क emacs -q।
लेकिन आरंभिक अड़चनें दूर करने के लिए और अधिक विस्तृत अनुमान प्राप्त करने के लिए जो शेफ़र्स की जाँच करें esup।
अंत में, लोडिंग समय जादुई रूप से गायब नहीं होता है। आप इसे केवल आगे बढ़ा रहे हैं (इस विस्तार तक कि आप प्रत्येक सत्र में सभी सुविधाओं का उपयोग करें)।
with-eval-after-loadएक बार लोड किया जाता है , इसलिए एक कीमैप-परिवर्तन वहाँ जाता है। हुक हर बार मोड के चलने पर लोड होता है, जैसे मोड से जुड़ी नई फ़ाइल लोड करने पर, या फिर हुक को परिभाषित किया जाता है। आप उदाहरण के लिएflyspell-modeयाhl-line-modeहुक में लोड करेंगे । अपने मेंinit.elमैंwith-eval-after-loadलगभग 160 बार औरadd-hook110 बार उपयोग करता हूं । एक आलसी init एक अच्छा init (IMO) है।