उपयोग-पैकेज -: init या: config


14

क्या कोई नियम है जिसके द्वारा उपयोगकर्ता यह निर्धारित कर सकता है कि पैकेज कॉन्फ़िगरेशन की आवश्यकता है :initया नहीं :config?

जवाबों:


13

क्या कोई नियम है जिसके द्वारा उपयोगकर्ता यह निर्धारित कर सकता है कि पैकेज कॉन्फ़िगरेशन की आवश्यकता है :initया नहीं :config?

कोई सामान्य नियम नहीं है जो सभी सेटिंग्स और पैकेजों पर लागू होता है; आपको केवल README फाइल को पढ़कर इन कीवर्ड्स के अर्थ से खुद को परिचित करना होगा use-package

सारांश में, :initब्लॉक स्टार्टअप पर चलाया जाता है, जैसे कि आपने अपने घटक रूपों को अपने स्तर के शीर्ष स्तर (यानी एक सामान्य कॉल के बाहर use-package) में रखा था user-init-file। इसका मतलब है कि वे हमेशा चलाए जाते हैं, भले ही संबंधित पैकेज लोड किया गया हो या नहीं।

:configब्लॉक, दूसरे हाथ पर, के बाद इसी पैकेज लोड किया गया है चलाया जाता है, के माध्यम से eval-after-loadतंत्र।

जैसे, आप अपने स्टार्टअप समय को लागू होने वाली लंबी-चौड़ी सेटिंग्स से बेहतर बना :initसकते हैं :config। यदि आपको एक चर को संशोधित करने की आवश्यकता है जो केवल एक विशेष पैकेज को लोड करने के बाद परिभाषित किया गया है, तो आपको इसे :configब्लॉक में रखने की आवश्यकता है । कुछ चर, जैसे gnus-home-directory, उनके संबंधित पैकेज को लोड करने से पहले सेट करने की आवश्यकता होती है, इसलिए उन्हें अंदर रखा जाना चाहिए :init। मैं दृढ़ता से ब्लॉक में सभी लागू add-hook/ remove-hookकॉल लगाने की सलाह देता हूं :init, क्योंकि हुक अनबाउंड होने पर भी संशोधित किया जा सकता है, और यह आपके सेटअप के लिए अधिक प्रतिरूपता देता है।

आप अक्सर यह पता लगाने से बच सकते हैं कि नए :customकीवर्ड का उपयोग करके या आसान अनुकूलन इंटरफ़ेस का उपयोग करके किसी विशेष सेटिंग को कहां रखा जाए ।


2

मुझे यकीन नहीं है कि अगर कोई सामान्य नियम है (इसके अलावा " :initवास्तविक पैकेज लोड करने से पहले प्री-कॉन्फिडेंस के :configलिए उपयोग करें और अन्य, अच्छी तरह से, कॉन्फ़िगरेशन के लिए उपयोग करें")।

लेकिन मैं खुद के लिए उपयोग करता हूं :initजब, उदाहरण के लिए, मैं "इस" पैकेज से कार्यों का उपयोग करने के लिए कुछ अन्य मोड मैप कीबाइंडिंग जोड़ना चाहता हूं। और अभी भी "यह" पैकेज आलसी लोड होना चाहते हैं।

यहाँ आलसी लोडिंग का उदाहरण है dired-ranger:

(use-package dired-ranger
  :commands (dired-ranger-copy dired-ranger-paste dired-ranger-move)
  :init
  (add-hook 'dired-mode-hook
            (lambda ()
              (define-key dired-mode-map (kbd "M-w") 'dired-ranger-copy)
              (define-key dired-mode-map (kbd "C-y") 'dired-ranger-paste)
              (define-key dired-mode-map (kbd "C-c C-y") 'dired-ranger-move))))

पुनश्च: यदि कोई :defer, :commands, :modeऔर दूसरों के पैकेज लोड हो रहा है आलसी बना देता है, तो :initऔर :configअधिक या कम एक ही होना चाहिए (लेकिन :initपहले मूल्यांकन किया जाएगा :))


4
एक मोड हुक में कुंजी बाइंडिंग को संशोधित करने का मतलब है कि वे उस मोड में बफर खोलने पर हर बार चलाए जाते हैं । पैकेज लोड होने के बाद आपको केवल एक बार कुंजी बाइंडिंग को संशोधित करना होगा। आप इसके लिए :bindकीवर्ड का उपयोग कर सकते हैं या :configब्लॉक में कुंजी बाइंडिंग को संशोधित कर सकते हैं ।
तुलसी

वास्तव में, इसके बारे में कभी नहीं सोचा। लेकिन :configबहुत देर हो चुकी है - आलसी लोडिंग मेरे बाइंडिंग को लागू नहीं करेगा। और :bindसाथ :mapवास्तव में यह बाँध नहीं है।
मैक्सिम किम

3
:configबहुत देर नहीं हुई है - यह ठीक है जब dired-mode-mapपहली बार परिभाषित किया गया है। आप कर रहे हैं शायद सिर्फ गलत में डालने use-packageके रूप dired-rangerके बजाय dired, जहां dired-mode-mapपरिभाषित किया गया है। यह भी समझा सकता है कि आपका :bindकाम क्यों नहीं करता है। असल में, या तो आप कुछ गलत कर रहे हैं या use-packageएक बग है। स्थानीय कीबाइंडिंग को भ्रमित न करें और eval-after-loadऑटोलॉइड कमांड / कीमैप के वैश्विक कीबाइंडिंग के साथ।
तुलसी

@ बासिल, thx, तुम सही हो। मेरी समस्या यह थी कि मैंने सेट कर दिया है use-package-always-ensureऔर जब मैं उपयोग करने के लिए-पैकेज की कोशिश करता हूं तो यह एलपा से लाने में विफल रहता है। लेकिन :ensure nilवहाँ होने से समस्या हल हो जाती है और मैं जंजीर पैकेज लोडिंग dired-> dired-rangerका उपयोग कर सेट कर सकता हूं :after
मैक्सिम किम
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.