2011-05-28 16 views
5

मैं अपने emacs कॉन्फ़िगरेशन में निम्न संरचना का उपयोग करता हूं: प्रत्येक प्रोग्रामिंग मोड का उपयोग करने के लिए, मैं प्रोग्रामिंग-मोड-config.el नामक फ़ाइल में कॉन्फ़िगरेशन बनाए रखता हूं। (इसलिए पायथन कॉन्फ़िगरेशन पायथन-मोड-config.el आदि में जाएगा)।कस्टम कॉन्फ़िगरेशन को सही तरीके से लोड करने के लिए मैं ऑटोलोड का उपयोग कैसे करूं?

इससे पहले, मुझे इन फ़ाइलों में से प्रत्येक में myit.el में आवश्यकता होती थी। इस दृष्टिकोण की कमी यह थी कि मेरा स्टार्ट-अप समय बड़ा था। तो इस सप्ताहांत में, मैं बैठ गया और सभी जरूरतों को ऑटोलोड में परिवर्तित कर दिया। अब मेरी init फ़ाइल इस तरह दिखता है: जब तक मैं एक अजगर फ़ाइल को खोलने

(autoload 'python-mode "python-mode-config" "Load python config" t) 

इस प्रकार अजगर config लोड नहीं किया जाएगा। इससे मेरा स्टार्ट-अप समय लगभग 1 सेकंड तक पहुंच गया, लेकिन यह सभी मामलों में ठीक से काम नहीं करता है। उदाहरण के लिए,

(autoload 'erc "erc-mode-config" "Load configuration for ERC" t) 

मेरे एआरसी tweaks बिल्कुल लोड नहीं करता है। autoload प्रलेखन को देखते हुए, यह कहा गया है कि:

Define FUNCTION to autoload from FILE. 
... 
If FUNCTION is already defined other than as an autoload, 
this does nothing and returns nil. 

तो मेरा अनुमान है कि कि ईआरसी config लोड नहीं है क्योंकि ईआरसी आता है 'में निर्मित' जबकि अजगर मोड Emacs के साथ मैं का उपयोग एक प्लगइन है। क्या कोई तरीका है कि मैं अपने एआरसी कॉन्फ़िगरेशन को केवल लोड करने के लिए प्राप्त कर सकता हूं जब मैं वास्तव में ईआरसी का उपयोग करता हूं? एकमात्र अन्य विकल्प जो मैं देखता हूं वह eval-after-load का उपयोग कर रहा है, लेकिन मेरे अनुकूलन के प्रत्येक छोटे हिस्से को एक eval-after-load में डालने के बजाय दर्दनाक होगा।

मुझे डर है कि यह भी हो सकता है कि मैंने ऑटोलोड को ठीक से नहीं किया है। किसी भी सहायता की सराहना की जाएगी।

उत्तर

10

autoload का उद्देश्य किसी निश्चित फ़ाइल से फ़ंक्शन लोड करने के लिए किया जाना है, अतिरिक्त कार्यक्षमता लोड नहीं करना - ऐसा लगता है कि आप ऐसा करने का प्रयास कर रहे हैं।

उपयोग eval-after-load बजाय:

(eval-after-load "erc" '(load "erc-mode-config")) 

कि Emacs बताता है के बाद "erc" फ़ाइल लोड किया गया है erc-mode-config पुस्तकालय लोड करने के लिए - जो है तुम क्या चाहते। यदि आपके पास provide कथन है तो आप '(require 'erc-mode-config) का भी उपयोग कर सकते हैं।

autoload का सही उपयोग प्रतीक वाली वास्तविक फ़ाइल को लोड करना है। तो, द्वारा होने

(autoload 'erc "erc-mode-config" "Load configuration for ERC" t) 

आप Emacs कह रहे थे "erc-mode-config" पुस्तकालय, जो जहां erc समारोह परिभाषित किया गया है नहीं है लोड करके समारोह erc खोजने के लिए। साथ ही, दस्तावेज़ में प्रश्न के लिए डॉकस्ट्रिंग है, इसलिए autoload उपरोक्त विवरण erc"Load configuration for ERC" के लिए सहायता स्ट्रिंग बनाता है - जो भी गलत है।

मैं अनुमान लगा रहा हूं कि आपका पहला autoload उदाहरण काम करता है क्योंकि आपके पास अपनी कॉन्फ़िगरेशन फ़ाइल में (require 'python) कथन है ... लेकिन यह केवल एक अनुमान है।

+0

धन्यवाद, मुझे एक नाराज लग रहा था कि मेरे ऑटोलोड्स गलत थे :) – vedang

+0

इसके अलावा, आप सही थे। मेरे पहले की कॉन्फ़िगरेशन (इसके बाद 'पायथन की आवश्यकता होती है) (इसके बाद' पायथन-मोड-कॉन्फ़िगरेशन की आवश्यकता होती है)। जब मैं इसे ऑटोलोड के रूप में पुनः लिखता हूं तो मैंने पाइथन-मोड-कॉन्फ़िगरेशन फ़ाइल में (आवश्यक 'पायथन) कमांड को स्थानांतरित किया। अब मेरे सभी ऑटोलोड और बैक-अप-लोड लोडिंग और फिक्सिंग। – vedang

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

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