Emacs

2014-07-13 6 views
32

के अपग्रेड के बाद ईएलपीए पैकेजों का पुनर्निर्माण कैसे करें मैंने मैकोज़ पर 23 से 24 तक जीएनयू एमएक्स को अपग्रेड किया और कुछ ईएलपीए स्थापित पैकेजों ने काम करना बंद कर दिया। उनमें से एक AucTeX है। इसे हटाने से और पैकेज प्रबंधक के माध्यम से पुन: इंस्टॉल करके इसे फिर से काम किया है, लेकिन मैं हर पैकेज के लिए हाथ से यह करने के लिए नहीं करना चाहती। मैं थोड़ा उलझन में हूं कि मुझे इंटरनेट पर इसके बारे में कुछ भी नहीं मिला।Emacs

Emacs का एक नया संस्करण के लिए फिर कंपाइल किया करने के लिए .elc की जरूरत नहीं है? यह पैकेज.एल की सुविधा क्यों नहीं है?

उत्तर

58

आप सभी संकुल को फिर से स्थापित करने की आवश्यकता नहीं है। संकुल स्वयं ठीक हैं, हालांकि, उन्हें फिर से संकलित करने की आवश्यकता है, क्योंकि Emacs Lisp बाइट कोड आम तौर पर प्रमुख संस्करणों में संगत नहीं है।

सभी संकुल, प्रकार M-: (byte-recompile-directory package-user-dir nil 'force) फिर से संकलन करने के लिए। Emacs को पुनरारंभ करने के बाद, पैकेज फिर से ठीक काम करना चाहिए।

+0

मेरी समझ यह है कि बाइट कोड संगतता केवल एक मुद्दा है यदि आप Emacs के पुराने संस्करण में डाउनग्रेडिंग (या समान) हैं। एक नया Emacs संस्करण एक पुराने Emacs संस्करण द्वारा संकलित बाइट कोड चलाएगा। – phils

+1

हालांकि यह सच है कि एमएक्स बाइट कोड पिछड़ा संगतता बनाए रखता है, आमतौर पर बाद में बड़े संस्करण में जाने पर, फिर से संकलन करना एक अच्छा विचार है। कारण यह है कि बाद में प्रमुख संस्करणों अक्सर नई सुविधाएं प्रदान और इनमें से कुछ बेहतर प्रदर्शन या कार्यक्षमता हो सकती है। –

3

चर package-activated-list पैकेजों की सूची हम में रुचि रखते हैं रखती है। तो हम बस फिर से हर एक को स्थापित करने की आवश्यकता। हमें उन्हें स्पष्ट रूप से हटाने की आवश्यकता नहीं है; बुला package-install एक पुराने संस्करण दूर उड़ा देगा।

एक खरोंच बफर में इस कोड को रखो और मूल्यांकन (कि, अंत में अपने कर्सर डाल दिया जाता है, और प्रेस C-x C-e):

(dolist (package-name package-activated-list) 
    (package-install package-name)) 
+0

यह विफल रहता है: डीबगर में प्रवेश किया - लिस्प त्रुटि: (गलत प्रकार तर्क arrayp एसी-dabbrev): पंक्ति 1: पैकेज-desc-भरा -नाम (एसी-डैब्रेबव) लाइन 2: पैकेज-इंस्टॉल (एसी-डैब्रेब) –

1

यह Emacs 25.1 और 26 पर मेरे लिए काम करता है:

(defun package-reinstall-activated() 
    "Reinstall all activated packages." 
    (interactive) 
    (dolist (package-name package-activated-list) 
    (when (package-installed-p package-name) 
     (unless (ignore-errors     ;some packages may fail to install 
       (package-reinstall package-name) 
       (warn "Package %s failed to reinstall" package-name)))))) 
+0

बस 'एम-एक्स पुनर्स्थापित पैकेज आरईटी पैकेज-नाम' एक पैकेज के लिए अंतःक्रियात्मक रूप से काम करता है। – peterhil