मैं उपयोग-पैकेज का उपयोग करते हुए पर्याप्त लोडिंग को कैसे स्थगित कर सकता हूं?


9

मैं अब अपने सभी उपयोग-पैकेज कॉल को अपडेट कर रहा हूं जो :idleअब सामान को हटाने के लिए एक सभ्य तरीका नहीं है। फिलहाल मेरे लोड समय पर सबसे बड़ी हिट में से elpyएक है जो अतिरिक्त मॉड्यूल का एक पूरा गुच्छा लोड करता है । फिलहाल मेरा आह्वान बल्कि बुनियादी है:

(use-package elpy
  :commands elpy-enable
  :init (elpy-enable)
  :config
  (progn
    (setq elpy-rpc-backend "jedi"
          elpy-rpc-project-specific 't)
    (when (fboundp 'flycheck-mode)
      (setq elpy-modules (delete 'elpy-module-flymake elpy-modules)))))

हालाँकि, यह बेकार है अगर मैं किसी भी अजगर मॉड्यूल का संपादन नहीं कर रहा हूँ। यह परेशानी काफी हद तक सही है, इसलिए मैं मोड बाइंडिंग फॉर्म का इस्तेमाल नहीं कर सकता, क्योंकि मुझे elpy-enableकॉल करने की जरूरत है। तो मुझे किस दृष्टिकोण का उपयोग करना चाहिए। क्या यह सिर्फ अजगर-मोड हुक पर ट्रिगर करने का मामला है?


मैंने उपयोग-पैकेज के MELPA संस्करण को ट्रैक करना बंद कर दिया है। ऐसा लगता है: निष्क्रिय को इसे बदलने के लिए कुछ भी नहीं के साथ हटा दिया गया था। मैं बस तब तक इंतजार करूंगा जब तक कि कोई रिप्लेसमेंट नहीं हो जाता।
अबो-अबो

@ abo-abo: मैं समझ सकता हूं क्यों: निष्क्रिय थोड़ा हैक है। वास्तव में उचित ऑन-डिमांड लोडिंग के लिए इसे "कुछ समय बीतने" के अलावा किसी अन्य घटना से ट्रिगर किया जाना चाहिए।
stsquad

2
:idleकुछ इस तरह से प्रतिस्थापित किया जा सकता है जैसे :defer 30कि संख्या सेकंड में देरी है जिसके बाद पैकेज लोड किया जाना चाहिए।
कौशल मोदी

@kaushalmodi, क्या यह पहले से ही काम करता है?
अबो-अबो

@ abo-abo मैंने कोशिश नहीं की है लेकिन यह शायद करना चाहिए। मैंने उस अपडेट को कल के कमिट में पढ़ा। README को उस जानकारी के साथ भी अपडेट किया जाता है।
कौशल मोदी

जवाबों:


6

मैं एल्पी को नहीं जानता, इसलिए मुझे यकीन नहीं है कि मैं आपकी समस्या को ठीक से समझ पा रहा हूं। मुझे पता है use-package, हालांकि, और हाल ही में एक ही मुद्दे से पीड़ित है, अर्थात् को हटाने :idle

असल में, वहाँ दो तरीके हैं, इस पर निर्भर करता है कि आपको एल्पी का उपयोग करने की आवश्यकता कैसे है। आप या तो एक गरीब आदमी का उपयोग कर सकते हैं :idle, के साथ run-with-idle-timer, जैसे

:init (run-with-idle-timer 10 nil #'elpy-enable)

वैकल्पिक रूप से, आप अच्छे पुराने with-eval-after-loadया उपयोग पर भरोसा कर सकते हैं python-mode-hookऔर जब तक पायथन मोड लोड या सक्षम नहीं किया जाता है, तब तक एल्पी में देरी हो सकती है:

:init (add-hook 'python-mode-hook #'elpy-enable)
;; or
:init (with-eval-after-load 'python (elpy-enable))

यदि एल्पी एक सरल विधा थी तो यह ठीक होगा। हालांकि वास्तव में यह मामूली-मोड का एक गुच्छा है जो अजगर के अनुभव को और अधिक एकीकृत करने के लिए एक साथ सिले हुए हैं। चूंकि पहले अजगर फ़ाइल लोड होने से पहले एल्पी-इनेबल स्टेप को चलाना होता है, इसलिए सभी मॉड्यूल कॉन्फ़िगर किए गए और तैयार होते हैं।
stsquad

@stsquad-eval-after-load के साथ ठीक वैसा ही करना चाहिए।
लूनारॉर्न

1
मुझे :commands elpy-enableइसे काम करने के लिए जोड़ना होगा। :init (with-eval-after-load 'python (elpy-enable)) :commands elpy-enable
अज़मसा

3

एल्पी के लेखक एक सलाह के माध्यम से ऐसा करने का सुझाव देते हैं, क्योंकि चर elpy-enableको संशोधित करता python-mode-hookहै, इसलिए इसे मोड-हुक के अंदर कॉल करना बहुत देर हो चुकी है: https://github.com/jorgensiplefer/elpy/wiki/Configuration

सरल दृष्टिकोण:

(package-initialize)
(advice-add 'python-mode :before 'elpy-enable)

का उपयोग कर use-package:

(use-package elpy :ensure t
  :defer t
  :init
  (advice-add 'python-mode :before 'elpy-enable))

1
जब मैं नहीं कर सका, तो इसे खोजने के लिए धन्यवाद। मैंने अनुचर को प्रतिक्रिया दी है कि IMHO यह जानकारी छिपाने के लिए गलत जगह है। यह आधिकारिक में भी है README.rst, लेकिन देखने के लिए पहली और सबसे स्पष्ट जगह में नहीं: प्रलेखन का स्थापना अनुभाग । मैंने इसे # 1606 के अंक में रिपोर्ट किया है ।
एडम स्पीयर्स

2

मुझे लगता है कि यह संभव है: के बाद

(use-package python
  :ensure t
  :defer t
  :mode ("\\.py\\'" . python-mode))

(use-package elpy
  :ensure t
  :after python
  :config (elpy-enable))

1
मेरे लिए काम नहीं किया। इसके अलावा, :deferअगर आपको पहले से ही उपयोग करने की आवश्यकता नहीं है :modegithub.com/jwiegley/use-package#notes-about-lazy-loading
azzamsa
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.