से इसे जारी रखते हुए नई सलाह सिस्टम के बारे में एक और प्रश्न का उत्तर :
पुरानी शैली में advice.el
, एक सलाह दी गई फ़ंक्शन की तर्क सूची के अलग-अलग सदस्यों को हेरफेर करना संभव था, बिना उन सदस्यों के बारे में कोई भी अनुमान लगाए बिना ऐसा हेरफेर नहीं किया गया था। उदाहरण के लिए, निम्नलिखित सलाह:
(defadvice ansi-term (around prompt-for-name last)
(let ((name (read-from-minibuffer "Tag: ")))
(and (not (string= name ""))
(ad-set-arg 1 (concat "Term: " name)))
ad-do-it))
ansi-term
कॉल करने के लिए बफर-नाम तर्क के वैकल्पिक (वैकल्पिक) प्रावधान की अनुमति देता है , जबकि ansi-term
अभी भी अपने स्वयं के संवादात्मक रूप के अनुसार संकेत देकर अपना पहला तर्क प्राप्त करेगा।
(बाद के संदर्भ के लिए, ansi-term
हस्ताक्षर है (PROGRAM &optional BUFFER-NAME)
, और इसका इंटरैक्टिव रूप कई संभावित चूक के साथ PROGRAM के लिए संकेत देता है, लेकिन BUFFER-NAME के बारे में कुछ भी नहीं करता है।)
मुझे यकीन नहीं है कि यह संभव है या नहीं nadvice.el
। यदि यह है, तो मुझे यकीन नहीं है कि यह कैसे किया जा सकता है। मुझे सलाह दी गई फ़ंक्शन की तर्क सूची को बदलने के कुछ तरीके मिले हैं ।
उदाहरण के लिए, * info * (elisp) से सलाह कॉम्बिनेटर :
`:filter-args' Call FUNCTION first and use the result (which should be a list) as the new arguments to pass to the old function. More specifically, the composition of the two functions behaves like: (lambda (&rest r) (apply OLDFUN (funcall FUNCTION r)))
अन्य कॉम्बिनेटर समान क्षमता प्रदान करते हैं, और उनमें से सामान्य धागा वह है, जबकि किसी फ़ंक्शन की तर्क सूची को प्रतिस्थापित किया जा सकता है, छोटा किया जा सकता है, विस्तारित किया जा सकता है, एट अल हो सकता है, बिना सूची में दिए गए स्थान पर तर्क को संशोधित करने के लिए फ़ंक्शन सलाह के लिए कोई स्पष्ट तरीका नहीं है बाकी के बारे में कुछ भी कहना ।
चर्चा के तहत मामले में, यह सलाह लेखक के लिए ansi-term
केवल एक बफर नाम को पारित करने के लिए असंभव प्रतीत होता है , क्योंकि ऐसी सूची का निर्माण संभव नहीं है जिसका मूल्य 1 में है, लेकिन कुछ भी नहीं, nil
स्थिति में भी नहीं है । 0. सामान्य मामले में, यह सलाह लेखक के लिए स्थिति 0 से परे तर्कों को मनमाने ढंग से संशोधित करने के लिए असंभव प्रतीत होता है।
यह उसी में दुर्भाग्यपूर्ण लगता है, इसी तरह के प्रभाव का उत्पादन करने के लिए, कोड-पेस्ट को कॉपी करना आवश्यक है: विशेष रूप से, या तो मैं ansi-term
संवादात्मक रूप को कॉपी कर सकता हूं और इसे अपने स्वाद तक बढ़ा सकता हूं, या मैं ansi-term
पूरी तरह से कॉपी कर सकता हूं और इसी तरह बढ़ा सकता हूं। या तो मामले में, मुझे अब अपनी इनिट फ़ाइल में एमएसीएस लिस्प वितरण का हिस्सा फिर से परिभाषित करना होगा, जो मुझे स्थायित्व और सौंदर्यशास्त्र दोनों के संदर्भ में अवांछनीय बनाता है।
मेरा सवाल यह है कि: क्या इस प्रकार की तर्क सूची के साथ काम किया जा सकता है nadvice.el
? यदि हां, तो कैसे?