एक आलसी 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-load
GNU 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
कई स्थानों की आवश्यकता है? यदि आप वास्तव में योग्य हैं, तो आप defun
s को अपनी फ़ाइल में किसी अन्य फ़ाइल में रख सकते हैं 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-hook
110 बार उपयोग करता हूं । एक आलसी init एक अच्छा init (IMO) है।