Emacs 24: ELPA के माध्यम से स्थापित पैकेज लोड हो रहा है


12

मैं सिर्फ cmake-modeEmacs 24 में पैकेज का उपयोग कर स्थापित किया है :

M-x package-install cmake-mode

मैं पैकेज को यहां देख सकता हूं: ~/.emacs.d/elpa/cmake-mode-20110824और मैं इसे Commentary:सेक्शन में इंस्ट्रक्शन के इस्तेमाल से लोड कर सकता हूं ~/.emacs.d/elpa/cmake-mode-20110824/cmake-mode.el:

;; Add this code to your .emacs file to use the mode:
;;
;;  (setq load-path (cons (expand-file-name "/dir/with/cmake-mode") load-path))
;;  (require 'cmake-mode)
;;  (setq auto-mode-alist
;;        (append '(("CMakeLists\\.txt\\'" . cmake-mode)
;;                  ("\\.cmake\\'" . cmake-mode))
;;                auto-mode-alist))

हालाँकि यह ELPA के EmacsWiki पेज पर उपयोग के निर्देश का खंडन करता है :

... पैकेजों को इनिशिएट किया जाता है, init.el लोड किया जाता है। इसका मतलब यह है कि आपको अपने init.el में पैकेज विशिष्ट आरंभीकरण नहीं करना चाहिए ...

मैं इस निर्देश से सहमत हूं क्योंकि मेरी ~/.gnu-emacsफ़ाइल में एक पंक्ति जैसे:

(add-to-list 'load-path "~/.emacs.d/elpa/cmake-mode-20110824/")

बदसूरत है, और जब मैं पैकेज को अपग्रेड करूंगा, तो वह टूट जाएगा। हालांकि इस लाइन के बिना मैं उपयोग करने में असमर्थ हूं cmake-mode

क्या मुझसे कोई चूक हो रही है?

टिप्पणियाँ:

  • मैंने package-enable-at-startupइसके साथ कुछ भी अजीब नहीं किया और इसका मूल्य है t
  • मैं प्रस्तावना का उपयोग कर रहा हूँ ।
  • user-emacs-directoryमूल्य है "~/.emacs.d/" (सुझाव के लिए धन्यवाद @ सूची)
  • package-user-dir मूल्य है "~/.emacs.d/elpa"

1
क्या यह संभव है कि आपने default-directoryया के स्थानों को बदल दिया है user-emacs-directory, जैसे कि elpaनिर्देशिका लोड नहीं हो रही है? package-installएक elpaनिर्देशिका बनाता है और स्थापना के दौरान बनाई गई ऑटोलॉड्स फ़ाइल उस स्थान पर आधारित होती है।
कानून

1
आपके प्रश्न में कोड की आपकी अंतिम पंक्ति बताती है कि आपने पैकेज को elpaनिर्देशिका से बाहर स्थानांतरित कर दिया है - यानी, ~/.emacs.d/cmake-mode-20110824/वह जगह नहीं है जहां ऑटोलैड फ़ाइल यह होने की उम्मीद करती है।
कानून व्यवस्था

@ सूची: आप बहुत चौकस हैं। मैंने प्रश्न में गलती की। यह अब (प्रश्न) के सही मूल्य के लिए तय हो गया है ~/.emacs.d/elpa/cmake-mode-20110824/। समस्या बनी हुई है।
चेन लेवी

जवाबों:


2

मैंने मुरब्बा-रेपो के साथ cmake- मोड स्थापित किया, और cmake-mode-autoloads.el पर एक नज़र डाली। ऐसा प्रतीत होता है कि लेखक ने एक सचेत निर्णय लिया notजिसमें ऑटोलॉड्स फ़ाइल के भीतर सेटअप के लिए आवश्यक सभी चीजें शामिल हैं। हालाँकि, cmake-mode.el की लाइनों पर 25 से 30 निर्देश सही हैं, जिन्हें आपने अपने प्रश्न में उद्धृत किया है। यदि आप 25 से 30 लाइनों का उपयोग करते हैं और सही तरीके से सेट करते हैं, तो आपको कोड की एक अतिरिक्त लाइन की आवश्यकता नहीं है (add-to-list 'load-path "~/.emacs.d/elpa/cmake-mode-20110824/")

जाहिर है, आप उपयोग नहीं करना चाहेंगे /dir/with/cmake-mode- आप ~/.emacs.d/elpa/cmake-mode-20110824अंत में बिना फॉरवर्डलैश के उपयोग करना चाहते हैं ।

(setq load-path (cons (expand-file-name "~/.emacs.d/elpa/cmake-mode-20110824") load-path))
(require 'cmake-mode)
(setq auto-mode-alist
      (append '(("CMakeLists\\.txt\\'" . cmake-mode)
                ("\\.cmake\\'" . cmake-mode))
              auto-mode-alist))

आपको सी-मेक-मोड ... निर्देशिका को हटाने की आवश्यकता हो सकती है और यदि कोड ऊपर काम नहीं करता है (अपने स्वयं के पथ का उपयोग करके) फिर से स्थापित करने का प्रयास करें।


ज़रूर, लेकिन जब तक मैं कुछ याद नहीं कर रहा हूँ, यदि आप बाद में ELPA के माध्यम से cmake- मोड को अपडेट करते हैं, तो या तो निर्देशिका का नाम बदलकर आपकी इनिट फ़ाइल में नहीं है, या नया संस्करण एक निर्देशिका में समाप्त होता है जो आपके लोड पथ में नहीं है; उत्तरार्द्ध मामले में, आप या तो अपडेट नहीं देखते हैं, या आपको अनुचित अजीबता मिलती है क्योंकि आप मैन्युअल रूप से एक संस्करण लोड कर रहे हैं और दूसरा लोड कर रहे हैं (package-initialize)। क्या मै गलत हु? मेरा मतलब है, मैंने ELPA का ज्यादा इस्तेमाल नहीं किया है और अभी तक इसके साथ किसी भी पैकेज को अपडेट नहीं किया है, इसलिए मैं गलत हो सकता हूं। और, निश्चित रूप से, यह किसी भी मामले में एक प्रमुख चिंता का विषय नहीं है, लेकिन इसे पूरी तरह से क्यों न बचें?
हारून मिलर

तुम सही हो। हालाँकि, पैकेज आपके बारे में जाने बिना खुद को अपडेट नहीं करते हैं - यदि और जब आप अपडेट करते हैं, तो वह समय आपके हाउसकीपिंग का होगा। मैं अक्सर विभिन्न पैकेजों की स्रोत फ़ाइलों को संशोधित करने के लिए पर्याप्त मात्रा में निवेश करता हूं, और मैं जरूरी नहीं चाहता कि उन्हें उस सभी समय बिताने के बाद अपडेट किया जाए। Emacs "रखरखाव मुक्त" पर विचार करने वाले से बहुत दूर है।
कानून

एक उत्कृष्ट बिंदु।
एरॉन मिलर

3

हाकी कोड रिपॉजिटरी के रूप में विकी की प्रकृति को देखते हुए, एमएसीएस हैकर्स के लिए आधा सहयोगी-संस्मरण , आपने इस बिंदु को काफी हद तक अनदेखा किया है:

यह आसान हो सकता है कि स्टार्टअप के दौरान पैकेज-इनिशियलाइज़ को किसी अन्य बिंदु पर ले जाएँ ताकि आप (ELPA) पैकेजों की आवश्यकता कर सकें; यह वर्णित मुद्दों का एक बहुत ख्याल रखता है:

मैं यह करता हूं; मेरी कस्टम इनिट स्क्रिप्ट द्वारा लोड की गई पहली फ़ाइलों में से एक (जिसके निर्माण से, मैं सभी को इकट्ठा कर सकता हूं, गंभीर एमएसीएस उपयोग 1 के पोंस असिनोरम है )

(require 'package)
(setq package-enable-at-startup nil)
(package-initialize)

और वहाँ से मैं बस (require)क्या ELPA संकुल की जरूरत है। यह भी ELPA स्थापित संकुल के व्यवहार पर बेहतर नियंत्रण की अनुमति का लाभ है; यदि, उदाहरण के लिए, मैं फिलहाल दिए गए पैकेज को अक्षम करना चाहता हूं, लेकिन इसे पूरी तरह से अनइंस्टॉल नहीं करना चाहता, तो संबंधित (require)कॉल को टिप्पणी करने का एक सरल मामला है , जहां डिफ़ॉल्ट व्यवहार को पूरी तरह से मेरे ELPA निर्देशिका से पैकेज को स्थानांतरित करने की आवश्यकता होगी।

(1. लगभग भारी प्रलोभन के बावजूद, मैंने अपने कस्टम इनिट स्क्रिप्ट का नाम देने से इनकार कर दिया lightsaber.el।)


यदि उपयोगकर्ता डिफ़ॉल्ट रूप से ईएलपीए पैकेज में रहता है तो बस एक रिमाइंडर, जिसे उपयोगकर्ता-इमैक-डायरेक्टरी में बदला जाता है। मैं ड्रॉपबॉक्स में अपना सामान रखता हूं और मुझे अपने बैच स्क्रिप्ट में उपरोक्त आदेशों का कोई प्रभाव देखने तक आश्चर्य नहीं हुआ जब तक मैंने इसे सेट नहीं किया।
22:29

1

आप पैकेजों के उपयोग के बाद अपना सारा आरंभिकरण कर सकते हैं after-init-hook। से EmacsWiki :

;; init.el
(add-hook 'after-init-hook (lambda () (load "<real init file>")))

0

जब मैंने ELPA का उपयोग करना शुरू किया था तो मुझे भी ऐसी ही समस्या हुई थी। मेरे मामले में मेरे पास कई स्थानीय पैकेज हैं क्योंकि वे ELPA में मौजूद नहीं थे।

और इस प्रकार मैंने लोड-पथ को बदल दिया था। किसी कारण से लोड-पाथ को पैकेज.एल द्वारा ठीक से अपडेट नहीं किया गया है। समस्या को हल करने के लिए मुझे कॉल करने के (setq load-path (cons "~/.emacs.d" load-path)) बाद रखना थाpackage-initialize

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.