डिफक्यूट का उपयोग कैसे करें?


15

अधिकांश Emacs उपयोगकर्ताओं की तरह मैंने चर बदलकर एक मोड को अनुकूलित किया है। मेरे साथ जो कभी नहीं हुआ वह इस और उस अनुकूलन के पीछे पूरी प्रोग्रामिंग मानसिकता है। मुझे इस बात का अहसास तब हुआ जब मैंने eshell के कुछ सोर्स कोड को देखना शुरू किया। मैं एक elisp प्रोग्रामर नहीं हूँ, लेकिन विशेष रूप से em-ls.elउपयोग करने के लिए लगता है defcustom, defgroupआदि यह विश्व स्तर पर-निर्धारित वेरिएबल कि elisp कोड का उपयोग करता है की एक छाया-दुनिया होने के लिए प्रतीत होता है। तो एक सवाल यह होगा कि क्या defcustomग्लोबल वेरिएबल्स (कस्टमाइज़ करने) के दूसरे तरीके का उपयोग किया जा रहा है?

क्या कोई मुझे इंगित कर सकता है कि कैसे सही तरीके से उपयोग करने के लिए (पहले समझें) पूरे विचार के पीछे defcustom, कब उपयोग करना है, क्यों, कब नहीं? शायद एक शुरुआती शुरुआत के लिए एक शुरुआती उदाहरण।


क्या आप स्पष्ट कर सकते हैं कि आप क्या पूछ रहे हैं? क्या आप जानना चाहते हैं कि customizeसुविधाओं का उपयोग कब करना है और कब हाथ से अनुकूलित करना है? या आप एक मोड लिखने में रुचि रखते हैं? उत्तरार्द्ध वह स्थिति है जिसमें आप वास्तव में अपने आप को defcustomइस तरह की चीजों का उपयोग करके पा सकते हैं।
दान

जवाबों:


21

अनुकूलन प्रणाली एक अंतर्निहित Emacs की सुविधा ठीक समस्या को हल करने के लिए डिज़ाइन का वर्णन-प्रोग्रामिंग औसत उपयोगकर्ता अपने संपादक को कॉन्फ़िगर करने के लिए आदर्श तरीका नहीं हो सकता है।

अनुकूलन कार्यक्षमता के लिए प्राथमिक प्रविष्टि बिंदु M-x customize RET(या Options > Customize Emacs > Top-level Customization Groupमेनू से) है। वहां से आपको सेटिंग एडजस्ट करने के लिए एक इंटरैक्टिव मेनू सिस्टम दिखाई देगा। यह इंटरफ़ेस लागू करता है कि सभी सेटिंग्स सही प्रकार (संख्या, स्ट्रिंग, रंग, आदि) के हैं, उपयोगकर्ताओं द्वारा प्रोग्राम को एमएसीएस कॉन्फ़िगर करते समय त्रुटि के एक प्रमुख स्रोत से बचना। यदि उपयोगकर्ता UI के माध्यम से किसी भी परिवर्तन को जारी रखने का विकल्प चुनता है, तो सेटिंग उपयोगकर्ता के आरंभिक फ़ाइल में एक विशेष खंड में संग्रहीत होती है (पढ़ें:) .emacs

defcustomनिम्न-स्तरीय Emacs लिस्प कार्यक्षमता के आसपास आवरण होता है, जैसे defvarकि दोनों चर घोषित करते हैं और इसे अनुकूलन इंटरफ़ेस के भीतर दिखाई देते हैं। यह डेवलपर को एक उपयुक्त संवादात्मक नियंत्रण प्रदर्शित करने के लिए आवश्यक अतिरिक्त मेटाडेटा प्रदान करने की अनुमति देता है - अर्थात इस चर में किस प्रकार का मूल्य संग्रहीत है? एक मनमाना तार? एक संख्या? विकल्पों के एक निश्चित सेट से एक विकल्प? आदि defgroupइन अनुकूलन विकल्पों के लिए एक समूह निर्माण है ताकि उन्हें एक अच्छी पदानुक्रम में व्यवस्थित किया जा सके।

इस कार्यक्षमता का उपयोग किसी भी समय किया जाना चाहिए क्योंकि डेटा के एक टुकड़े को लाइब्रेरी के आंतरिक विवरण के बजाय उपयोगकर्ता के लिए एक विन्यास योग्य विकल्प माना जाना चाहिए।

यहाँ मेरा एक छोटा सा पुस्तकालय से लिया गया एक सरल उदाहरण है:

(defgroup checkbox nil
  "Quick manipulation of textual checkboxes."
  :group 'convenience)

(defcustom checkbox-states '("[ ]" "[x]")
  "Checkbox states to cycle between.
First item will be the state for new checkboxes."
  :group 'checkbox
  :type '(repeat string))

defgroupशीर्ष स्तर के तहत अनुकूलन इंटरफेस के भीतर एक नया समूह बनाता convenienceआइटम। फिर मुझे संभावित चेकबॉक्स राज्यों को संग्रहीत करने के लिए एक चर की आवश्यकता थी। मैं उपयोग कर सकता था defvar, लेकिन चूंकि मैं चाहता हूं कि यह आसानी से अनुकूलन योग्य हो, इसलिए मैंने उपयोग करना चुना defcustom:groupभाग इंगित करता है कि यह पहले से परिभाषित समूह के अंतर्गत आता है, और :typeपता चलता है कि यह तार के एक दृश्य है। डिफ़ॉल्ट मान और विवरण भी है। उपयोगकर्ता द्वारा दर्ज किए गए मूल्यों को बदलने के लिए अतिरिक्त सुविधाएं (यहां नहीं दिखाई गई हैं) भी हैं।

यदि मैं अब दौड़ता हूं M-x customize RETऔर नेविगेट करता Convenience > Checkboxहूं, तो मैं निम्नलिखित देखता हूं:

अनुकूलन इंटरफ़ेस

यह दुनिया में सबसे सुंदर इंटरफ़ेस नहीं है, लेकिन ध्यान दें कि इसमें "चेकबॉक्स स्टेट्स" ( checkbox-statesआंतरिक रूप से) के मूल्य को अनुकूलित करने के लिए इंटरैक्टिव उपकरण हैं । यह वर्तमान स्ट्रिंग मानों INS(डालने) और DEL(हटाएं) बटन के साथ दिखाता है , और हमें स्ट्रिंग मानों को संपादित बक्से में संपादित करने की अनुमति देता है। जब हम कर लेते हैं तो हम यह तय कर सकते हैं कि क्या हमारे बदलावों को लागू करना है, उन्हें वापस करना है, या लागू करना है और उन्हें भविष्य के सत्रों के लिए सहेजना है।


2
अच्छी पोस्ट! अनुकूलित करने (और defcustom) के लिए सबसे महत्वपूर्ण लाभ यह है कि यह स्वचालित रूप से ध्यान रखता है : (1) टाइप-चेकिंग , आपको एक चर को गलत मान देने से रोकने में मदद करने के लिए (बशर्ते लेखक defcustomने उचित प्रकार प्रदान करने का प्रयास किया हो जांच), (2) आरंभीकरण ( :initialize) और अद्यतन ctions (ट्रिगर) ( :set)।
आकर्षित किया

धन्यवाद! मैंने आपके सुझावों को दर्शाने के लिए पोस्ट अपडेट की है।
2

8

क्या वैश्विक चर को (कस्टमाइज़ करने) करने का एक और तरीका डिफ्यूज है?

हाँ। खासकर यदि आप चाहते हैं कि आपके कोड के उपयोगकर्ता Mx अनुकूलित इंटरफ़ेस के माध्यम से चर आसानी से बदल सकें ।

defcustom आपके उपयोगकर्ताओं को दो महत्वपूर्ण लाभ प्रदान करता है: प्रलेखन और सुरक्षा। डॉक्यूमेंटेशन अच्छा है कि वहीं है। प्रकार की सुरक्षा किसी को यह निर्दिष्ट करने की अनुमति देती है कि आपके चर किस प्रकार के वैध मूल्य ले सकते हैं।

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

किसी ने मुझे कैसे ठीक से उपयोग करने के लिए जलाया इंगित कर सकते हैं ...

Defcustom के लिए मैन्युअल पृष्ठ आगे स्पष्टीकरण है। मैनुअल में कस्टमाइज़ेशन विषय का पूरा विवरण है।

... कब इस्तेमाल करना है, क्यों, कब नहीं?

मैं व्यक्तिगत रूप से विकास के दौरान कम बोझिल लगता हूं क्योंकि मुझे डिफावर और सेटक के साथ फिर से लोड की समस्याओं से जूझना नहीं पड़ता है ।

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