अनुकूलन प्रणाली एक अंतर्निहित 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(हटाएं) बटन के साथ दिखाता है , और हमें स्ट्रिंग मानों को संपादित बक्से में संपादित करने की अनुमति देता है। जब हम कर लेते हैं तो हम यह तय कर सकते हैं कि क्या हमारे बदलावों को लागू करना है, उन्हें वापस करना है, या लागू करना है और उन्हें भविष्य के सत्रों के लिए सहेजना है।
customizeसुविधाओं का उपयोग कब करना है और कब हाथ से अनुकूलित करना है? या आप एक मोड लिखने में रुचि रखते हैं? उत्तरार्द्ध वह स्थिति है जिसमें आप वास्तव में अपने आप कोdefcustomइस तरह की चीजों का उपयोग करके पा सकते हैं।