हुक क्या है?


8

बस स्पष्ट करने के लिए ... उदाहरण के लिए, इस डॉक्टर में :

एक हुक एक लिस्प वैरिएबल है जो कुछ अच्छी तरह से परिभाषित अवसर पर बुलाया जाने वाले कार्यों की एक सूची रखता है। (इसे हुक चलाना कहा जाता है।) सूची में अलग-अलग कार्यों को हुक के कार्य कहा जाता है। उदाहरण के लिए, kill-emacs-hookEmacs से बाहर निकलने से पहले हुक चलता है ...

मुझे लगता है कि यह कह रहा है कि एक चर (प्रतीक) है जिसका नाम kill-emacs-hook"हुक फ़ंक्शंस" की एक सूची का प्रतिनिधित्व करता kill-emacs-hookहै जो मूल्यांकन किए जाने पर चलेगा , जिससे उन कार्यों का प्रदर्शन होगा। सही बात? फिर

(add-hook 'text-mode-hook 'auto-fill-mode)

जोड़ रहा है auto-fill-modeकि सूची से पहचान करने के लिए text-mode-hookक्या पहले से ही वहाँ के अलावा। अच्छा। अब यह

(defcustom text-mode-hook nil
  "Normal hook run when entering Text mode and many related modes."
  :type 'hook
  :options '(turn-on-auto-fill flyspell-mode)
  :group 'wp)

ऐसा लगता है कि हम या तो बना रहे हैं या बदल रहे हैं text-mode-hook। मैं अब हुक की प्रकृति और उनके संबंधों के रूप में उलझन में हूं defcustom। मेरी तार्किक पसंद यह है कि यह कोड एक वैरिएबल बना रहा है text-mode-hookजो "प्रकार" का है (पता नहीं है कि टाइप का क्या मतलब है hook। क्या यह वास्तव में, हुक का प्रारंभिक निर्माण माना जाता है text-mode-hook? यदि हां, तो "विकल्पों" के साथ क्या हो रहा है? क्या ये माना जाने वाला हुक कार्य हैं, या कुछ और?


1
आपके लिंक से: «: विकल्प कीवर्ड चर के लिए सुझाई गई सूची को निर्दिष्ट करता है। आमतौर पर: विकल्प एक हुक पर लागू होता है। सूची केवल एक सुझाव है; यह अनन्य नहीं है; चर सेट करने वाला व्यक्ति इसे अन्य मूल्यों पर सेट कर सकता है; निम्नलिखित सूची को दिखाया गया है: विकल्प कीवर्ड का उद्देश्य उपयोगकर्ता को सुविधाजनक विकल्प प्रदान करना है। »
सिधेकिन

जवाबों:


6

हुक की Emacs लिस्प धारणा के बारे में आपकी समझ बिल्कुल सही है। वास्तव में, "सामान्य" हुक केवल कार्यों की सूची है (प्रत्येक फ़ंक्शन तर्क नहीं लेता है, अन्यथा इसे आमतौर पर "हुक" या एमएसीएस लिस्प में "सामान्य हुक" नहीं कहा जाता है)।

इनमें से अधिकांश चरों के नाम समाप्त होने वाले हैं -hook। वे सामान्य हुक हैं, जिनके माध्यम से चलते हैं run-hooks। ऐसे हुक का मूल्य कार्यों की एक सूची है; कार्यों को बिना किसी तर्क के कहा जाता है और उनके मूल्यों की पूरी तरह से अनदेखी की जाती है। ऐसे हुक पर एक नया फ़ंक्शन डालने का अनुशंसित तरीका कॉल करना है add-hook

वे चर जिनके नाम समाप्त -functionsहोते हैं, आमतौर पर असामान्य हुक होते हैं (कुछ पुराने कोड भी हटाए गए -hooksप्रत्यय का उपयोग कर सकते हैं ); उनके मूल्य कार्यों की सूची हैं, लेकिन इन कार्यों को एक विशेष तरीके से कहा जाता है (वे पारित किए गए तर्क हैं, या उनके रिटर्न मान का उपयोग किया जाता है)। वे चर जिनके नाम -functionउनके मूल्यों के रूप में एकल कार्य करते हैं।

अनुकूलन इंटरफ़ेस एक अलग चीज है। के बीच सभी अंतर है defvarऔर defcustomयह है कि उत्तरार्द्ध उपयोगकर्ता को "अनुकूलित" इंटरफ़ेस के माध्यम से चर को संपादित करने की अनुमति देता है। यह इंटरफ़ेस डेटा के कुछ प्रकार के संपादन तुम कह रहे हो कि अगर तो उदाहरण के लिए, सुविधा कर सकते हैं :typeकी text-mode-hookहै hook, तो अनुकूलन इंटरफेस सुनिश्चित करती है कि text-mode-hookहमेशा काम करता है की एक सूची है। इसके अलावा, आप निर्दिष्ट कर सकते हैं कि कौन से विकल्प तर्क के साथ सुझाए गए :optionsहैं।

तो, आपकी समझ सही है और defcustomइसके विकल्प Emacs को निर्देश देने का एक तरीका है, इसलिए यह उपयोगकर्ता को "अनुकूलित" इंटरफ़ेस का उपयोग करने पर बेहतर सहायता कर सकता है।


लेकिन यह एक उदाहरण defcustomमहान नहीं है क्योंकि text-mode-hookपहले से मौजूद है; यह पहले से ही शामिल है। सही? अब, अगर मैंने अपना स्वयं का मोड लिखा और फिर अनुकूलन चाहा, तो मैं यह करूँगा। मेरा भ्रम यह उदाहरण वास्तव में बना रहा है text-mode-hook, इसे बदल नहीं रहा है। क्या यह एक सही समझ है? और अगर यह वास्तव में एक नया निर्माण text-mode-hookकर रहा :optionsहै, तो उन दो कार्यों को add-hookसूची में, सही करने के लिए विकल्प के रूप में पेश कर रहा है ?
147pm

@ 147pm, यह उदाहरण आपको दिखाता है कि Emacs के मौजूदा कोड का कुछ हिस्सा अनुकूलन चर को परिभाषित करता है जो हुक का प्रतिनिधित्व करता है। संक्षेप में defcustomनए चर को परिभाषित करता है। इसमें विशेष उदाहरण text-mode-hookबनाया जाता है और इसका प्रारंभिक मूल्य है nil। अनुकूलन इंटरफ़ेस को यह भी बताया गया है कि इस सूची में शामिल होने के लिए अनुशंसित मूल्य हैं turn-on-auto-fillऔर flyspell-mode। हालाँकि text-mode-hookआप प्रोग्रामेटिक रूप से कुछ भी सेट कर सकते हैं , यह सामान्य चर है। आप add-hookकिसी अन्य फ़ंक्शन के साथ भी उपयोग कर सकते हैं ।
मार्क कर्पोव

@ 147, दूसरे शब्दों में, सभी कीवर्ड तर्क अनुकूलन प्रणाली के लिए संकेत हैं, वे इसके बाहर कोई अंतर नहीं करते हैं। संकेत के बिना कि कोड के लिए राशि (defvar text-mode-hook nil)
मार्क कार्पोव

लेकिन क्या यह है defcustomकि शुरू में हुक कैसे बनाया जा रहा है? जो दिखता है वैसा ही होता है। दूसरे शब्दों में यह उदाहरण कहीं न कहीं Emacs कोड के बाउल में गहरे से लिया गया है।
147pm

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