Emacs कस्टम सिस्टम के बारे में भ्रामक




elisp (4)

आपके लिए संक्षिप्त उत्तर है:

  • defvar द्वारा परिभाषित चर के लिए setq या setq-default उपयोग करें

  • defcustom द्वारा परिभाषित चर के लिए setq , setq-default , या Customize तंत्र का उपयोग Customize

नीचे लंबा जवाब है।

आपके द्वारा उपयोग करने वाले कार्य निम्न हैं:

  • set एक चर का मान सेट करने के लिए मुख्य फ़ंक्शन है

  • setq एक अन्य संस्करण है जो स्वचालित रूप से अपनी पहली तर्क उद्धरण देता है यह पहला तर्क है कि आप लगभग हर समय क्या करना चाहते हैं उद्धृत करने के बाद उपयोगी है।

  • कुछ चर को विश्व स्तर पर सेट नहीं किया जा सकता है जब भी आप चर सेट करते हैं तो यह केवल वर्तमान बफर के लिए निर्धारित होता है यदि आप वैश्विक रूप से इस चर को सेट करना अनुकरण करना चाहते हैं तो आप set-default या setq-default

फ़ंक्शन जो पैकेज लेखक का उपयोग करता है:

  • defvar जो पैकेज लेखक को एक चर परिभाषित करने और कुछ दस्तावेज देने की अनुमति देता है। इस फ़ंक्शन की आवश्यकता नहीं है लेकिन उपयोगकर्ताओं के जीवन को आसान बनाता है

  • defcustom बनाता है यह emacs को बताता है कि यह एक चर है, और यह डेवलपर को मूल्य निर्धारित करने के लिए एक custom इंटरफ़ेस बनाने की अनुमति देता है। डेवलपर कह सकता है, "इस वेरिएबल में केवल 'value' foo या 'bar' शामिल हो सकते हैं।

चर को सेट करना दो तरीकों से किया जा सकता है:

  1. अगर defvar का उपयोग किया गया था, मान केवल set फ़ंक्शन (या वेरिएंट) का उपयोग करके उपयोगकर्ता द्वारा इसके defvar में सेट किया जा सकता है।

  2. यदि defcustom इस्तेमाल किया गया था, तो मान set ( set देखें) का उपयोग करके set किया जा सकता है। कस्टमाइज़ तंत्र का उपयोग करते समय, emacs कुछ कोड उत्पन्न करेगा जो custom-set-variables में रखेगा। उपयोगकर्ता को इस फ़ंक्शन का उपयोग नहीं करना चाहिए।

कई समान सेटिंग कार्य हैं:

  1. सेट और सेटैक
  2. डिफॉल्ट सेट करें
  3. defcustom
  4. कस्टम सेट मूल्य
  5. कस्टम सेट चर
  6. अनुकूलित-सेट-मूल्य
  7. अनुकूलित सेट-चर

तो, इन कार्यों के बीच अंतर क्या है?

अगर मैं अपनी पसंद को ऐड-ऑन पर सेट करना चाहता हूं, तो इन परिदृश्य के लिए:

  1. यदि defcustom से एक चर सेटिंग, जो सेटिंग-समारोह बेहतर होगा?
  2. और defvar द्वारा एक चर सेटिंग के बारे में क्या?

इसके अतिरिक्त, उन आज्ञाओं के बीच के अंतर में वृद्धि हुई है, क्योंकि बाध्यकारी बाइक्सिंग की शुरुआत हुई, हालांकि यदि आप केवल कुछ वैरिएबल को कस्टमाइज़ करना चाहते हैं, तो इन मतभेद वास्तव में प्रासंगिक नहीं होंगे।

def... निर्माण वैश्विक वैरिएबल घोषित करता है set... फ़ंक्शन सेट चर, चाहे वैश्विक या स्थानीय जब x न तो एक स्थानीय वैरिएबल (वर्तमान फ़ंक्शन के औपचारिक पैरामीटर या let फार्म या समान रूप से घोषित) और न ही def... फॉर्म द्वारा परिभाषित है और आप लिखते हैं (setq x 0) बाइट कंपाइलर भी एक चेतावनी दिखाएगा

Warning: assignment to free variable `x'

defvar , defcustom , defconst साथ घोषित चर गतिशील रूप से बाध्य हैं, यानी जब आपके पास एक निर्माण होता है

(let ((lisp-indent-offset 2))
  (pp (some-function)))

फ़ंक्शन some-function वैश्विक चर lisp-indent-offset के परिवर्तन को देखेंगे।

जब कोई चर गतिशील रूप से बाध्य नहीं होता है, तो कुछ की तरह

(let ((my-local-var 1))
  (some-function))

जहां my-local-var का कोई वैश्विक मूल्य नहीं है, तो some-function को असाइन किए गए मान नहीं दिखाई देगा, क्योंकि यह वाकई रूप से निकलता है।

दूसरी तरफ, गतिशील रूप से स्कैड वेरिएबल को लिक्सिकल क्लोजर में कैप्चर नहीं किया जाएगा।

अधिक जानकारी http://www.gnu.org/software/emacs/manual/html_node/elisp/Lexical-Binding.html में देखी जा सकती है


वे, एक ही बात करने के लिए मोटे तौर पर सभी रास्ते हैं हालांकि कुछ महत्वपूर्ण अंतर हैं उन्हें जानने का सबसे अच्छा तरीका है एमैक्स और एलिसप (देखें Ch i) लिए मैनुअल पढ़ना। हालांकि सिर के ऊपर बंद:

  • set एक "निम्न स्तरीय" चर असाइन है
  • (setq foo bar) शॉर्टहैंड के लिए है (set (quote foo) bar)
  • (set-default foo bar) अर्थ है "जब तक कि वर्तमान बफर में foo की अधिक स्पष्ट रूप से परिभाषित परिभाषा नहीं है, मान बार का उपयोग करें", और सभी बफ़र्स पर लागू होता है
  • defcustom को एक वैरिएबल को चिह्नित करने के लिए उपयोग किया जाता है जो उपयोगकर्ता को customize सुविधा के माध्यम से सुरक्षित रूप से संशोधित करने में सक्षम होने की उम्मीद है।
  • custom-set-value और customize-set-value दो नाम हैं जो समान फ़ंक्शन को इंगित करते हैं। customize सिस्टम के साथ काम करने के लिए वे सुविधा के तरीके हैं
  • custom-set-variables और customize-set-variables का उपयोग किसी भी अनुकूलित-से-अनुकूलित वैरिएबल को सक्रिय करने के लिए किया जाता है, IIRC।

सामान्य तौर पर, इसके बारे में चीजों को बदलने के लिए Mx customize करने का सुझाव दिया गया है। आप अपने। set या defcustom का उपयोग करके परिभाषित चीजों को सेट करने के लिए स्वतंत्र हैं, कस्टमाइज़ सिस्टम आपको इसके बारे में चेतावनी देगा यदि आप बाद में इसे customize इसे customize करते हैं।

आमतौर पर defcustom आम तौर पर वितरण के लिए किए गए पैकेज लिखने वाले लोगों द्वारा उपयोग किए जाते हैं, और मुझे नहीं लगता कि मैंने किसी को custom-set-* setq लोगों की प्रारंभिक फाइलों में बहुत आम है, ताकि वे चीजों को सेट अप करने के लिए सेट कर सकें कि वे किस तरह पसंद करते हैं, भले ही इन चीजों को customize या नहीं के साथ उपयोग के लिए चिह्नित किया जाए या नहीं।

मुझे इस सबकी पूर्ण समझ नहीं है, उम्मीद है कि कोई और अधिक प्रकाश डाल सकता है, लेकिन मुझे लगता है कि यह काफी अच्छा अवलोकन है: पी


  1. set और setq वेरिएबल के किसी भी प्रकार को निर्दिष्ट करने के लिए उपयोग किए जाने वाले सबसे निम्न स्तर की प्राथमिकताएं हैं।
  2. set-default और setq-default emacs एक्सटेंशन हैं जो बफ़र-लोकल वैरिएबल के साथ जाते हैं, नए बफ़र्स के लिए उपयोग किए जाने वाले डिफ़ॉल्ट मान को सेट करने की अनुमति देने के लिए। 3-7। सभी "कस्टम" सामान बाद में एक अतिरिक्त है जो उपयोगकर्ता प्राथमिकताओं के रूप में उपयोग किए जाने वाले वेरिएबल के प्रबंधन के लिए उपयोगकर्ता इंटरफ़ेस का समर्थन करने के लिए डिज़ाइन किया गया था
  3. defcustom के समान है, लेकिन आप विकल्प के पदानुक्रम में एक स्थान निर्दिष्ट करने के साथ-साथ डेटा प्रकार की जानकारी प्रदान कर सकते हैं ताकि UI मेनू के रूप में मान प्रदर्शित कर सके या स्वचालित रूप से उचित प्रकार के उपयोगकर्ता इनपुट को परिवर्तित कर सके।
  4. मुझे नहीं लगता कि custom-set-value समारोह है
  5. सभी उपयोगकर्ता के विकल्प सहेजे जाने पर custom-set-variables कस्टमाइज़ UI द्वारा उपयोग किया जाता है। यह सभी चर को सूचीबद्ध करता है जो उपयोगकर्ता अपने डिफ़ॉल्ट से बदल चुका है। 6-7। custom-set-value और custom-set-variable उपयोगकर्ता को एक विकल्प वैरिएबल के वर्तमान और डिफ़ॉल्ट मानों के लिए संकेत करने के लिए अनुकूलित करें UI द्वारा उपयोग किया जाता है, और उन्हें असाइन करें। आप आमतौर पर इसे खुद नहीं कहते हैं।




elisp