2012-06-20 8 views
43

ऐसा लगता है कि Emacs 24 पर अंतर्निहित नई पैकेज सिस्टम में कुछ त्रुटियां हैं जब स्थापित पैकेजों को ठीक से लोड करने और प्रारंभ करने की बात आती है।Emacs 24 पैकेज सिस्टम प्रारंभिक समस्याएं

हाल ही में, मैंने Emacs 24.1.1 में अपग्रेड किया जिसे 6/10/2012 को पुन: जारी किया गया था और मैं अंतर्निहित पैकेज सिस्टम का उपयोग करने की कोशिश कर रहा हूं और इसका उपयोग करके कई पैकेज स्थापित किए हैं, लेकिन उन सभी को एक समान समस्या है ऑटोलोड और प्रारंभिक से संबंधित है।

उदाहरण के लिए, मैं smex नामक पैकेज का उपयोग करता हूं जो M-x तार का उपयोग करने के लिए संवर्धन प्रदान करता है। इसके लिए आपको M-x के लिए एक कुंजी परिभाषित करने की आवश्यकता है, इसलिए मैंने को init.el फ़ाइल में जोड़ा। लेकिन emacs शुरू करने के बाद मैं M-x तार दबाता हूं और मुझे संदेश मिलता है "प्रतीक की फ़ंक्शन परिभाषा शून्य है: smex" ... अगर मैंने अपनी init.el फ़ाइल में (require 'smex) भी डाला है तो मुझे त्रुटि संदेश "फ़ाइल त्रुटि: नहीं हो सकता खुला लोड फाइल, SMEX "

SMEX के स्थान, लेकिन यह अपेक्षित तरीके से बनाता लोड पथ वैरिएबल को जोड़ना, कि पहली जगह में एक पैकेज प्रणाली होने का पूरा उद्देश्य को हराने के लिए लगता है ...

कोई विचार? क्या कोई बेहतर तरीका है या क्या हम अभी इस सीमा के साथ रहते हैं?

उत्तर

38

संकुल है कि आप package.el के साथ स्थापित करने के बाद अपने .emacs भरी हुई है डिफ़ॉल्ट से सक्रिय रहे हैं। के अंत से पहले उन्हें इस्तेमाल करने में सक्षम होने के अपने .emacs आप आदेशों का उपयोग करके उन्हें सक्रिय करने की जरूरत है:

(setq package-enable-at-startup nil) 
(package-initialize) 
+0

मुझे लगता है कि फिल्स से जवाब बहुत मूल्यवान और यहां तक ​​कि यह एक से सही है; वह यह भी बताता है कि क्यों। –

+4

@ErikAllik, डाउनवॉटिंग रिपोर्ट करना है कि जानकारी गलत है। आपको केवल दूसरे सटीक उत्तर को अपनाना चाहिए था। यह समझने के लिए कि यह उत्तर क्यों स्वीकार किया गया था, बस तिथियों को देखें। यह दूसरे से 15 महीने पहले लिखा गया था। –

+1

यह केवल स्कोर को संतुलित करने के लिए था - संभवतः अनुचित कार्य :) –

74

यह ध्यान देने योग्य है क्यों Emacs defers पैकेज प्रारंभ:

चौधरी देखें मैंजी(emacs) Package Installationआरईटी, और विशेष रूप से:

The reason automatic package loading occurs after loading the init file is that user options only receive their customized values after loading the init file, including user options which affect the packaging system. In some circumstances, you may want to load packages explicitly in your init file (usually because some other code in your init file depends on a package). In that case, your init file should call the function package-initialize . It is up to you to ensure that relevant user options, such as package-load-list (see below), are set up prior to the package-initialize call. You should also set package-enable-at-startup to nil , to avoid loading the packages again after processing the init file. Alternatively, you may choose to completely inhibit package loading at startup, and invoke the command M-x package-initialize to load your packages manually.

तो तुम सुनिश्चित करें कि आपके init फ़ाइल package-initialize कॉल करने से पहले किसी भी गैर मूलभूत मूल्यों आप package अनुकूलन समूह में चर के लिए चाहते हैं का ख्याल रखता है बनाने के प्रदान की - और जब भी पैकेज पुस्तकालय को अनुकूलित कर आप इस दृष्टिकोण का कहना है कि कॉन्फ़िगरेशन - ऐसा करना ठीक होना चाहिए।

वैकल्पिक रूप से, क्योंकि after-init-hook मानक पैकेज प्रारंभ करने के बाद चलाता है, तो आप किसी भी इनिट कोड का मूल्यांकन करने के लिए इसका उपयोग कर सकते हैं जो संकुल पर निर्भर करता है। तो बजाय init.el में सीधे package-initialize बुलाने की, आप के बजाय लिख सकते हैं:

(add-hook 'after-init-hook 'my-after-init-hook) 
(defun my-after-init-hook() 
    ;; do things after package initialization 
) 

कि समारोह के भीतर initialized पैकेज प्रणाली की आवश्यकता होती है कोड डाल।

वाईएमएमवी।

(एनबी मैंने बाद में इनसाइट दृष्टिकोण का परीक्षण नहीं किया है, क्योंकि मैं वास्तव में पैकेज.ल का उपयोग नहीं करता हूं, लेकिन मैंने स्टार्ट-अप कोड में घटनाओं के अनुक्रम की पुष्टि की है, इसलिए मुझे विश्वास है कि यह काम करेगा का वर्णन किया।)

एम एक्सcustomize-groupआरईटीpackageआरईटी

+4

मुझे नहीं पता कि इस जवाब को इतने कम वोट क्यों प्राप्त हुए हैं और इसे स्वीकार नहीं किया गया है ... आपने जो समझाया है उसके प्रकाश में, स्वीकार्य उत्तर में पेश किया गया समाधान भी एक हैक जैसा प्रतीत होता है। –

+1

सर्वश्रेष्ठ स्पष्टीकरण .. मैंने इस पोस्ट से बहुत कुछ सीखा है। – mlwn

+0

महान जवाब! क्या मुझे अभी भी पैकेज के साथ लोड करने के बाद अपने पैकेज की आवश्यकता है-आरंभ करें? – Veritas

संबंधित मुद्दे