वैसे, जिस तरह से पारेरिट काम पर प्रतीत होता है वह यह है कि यह सिंटैक्स टेबल की जांच करता है कि यह देखने के लिए कि क्या आप किसी शब्द/प्रतीक/आदि के बाद एक जोड़ी डाल रहे हैं, इस मामले में यह एक जगह को सम्मिलित करने के लिए मजबूर करता है। आपको उस कार्यक्षमता को ओवरराइड करने की आवश्यकता है - जिसे कई अलग-अलग तरीकों से किया जा सकता है: सलाह, फ़ंक्शन निर्धारक को फिर से परिभाषित करें जी अंतरिक्ष, वाक्य रचना तालिका बदल रहा है, आदि
मैं सीधे आगे की कोशिश करेंगे:
(defun paredit-space-for-delimiter-p (endp delimiter)
(and (not (if endp (eobp) (bobp)))
(memq (char-syntax (if endp (char-after) (char-before)))
(list ?\" ;; REMOVED ?w ?_
(let ((matching (matching-paren delimiter)))
(and matching (char-syntax matching)))))))
यह स्पष्ट रूप से सभी स्थानों पर जहां आप paredit
उपयोग करने के लिए लागू होगी। यदि आप कुछ और मोड विशिष्ट चाहते हैं, तो आप and
कथन (उदा। (and ... (memq major-mode '(c-mode lisp-mode)))
) में कुछ स्थितियां जोड़ सकते हैं।
तो ... मुझे लगता है कि मैंने "स्रोत" बदल दिया है, लेकिन आप defadvice
के टुकड़े के साथ एक ही काम कर सकते हैं ... यह सब कुछ elisp है, तो अंतर न्यूनतम है। इस प्रकार के व्यवहार को नियंत्रित करने के लिए एक सेटिंग प्रतीत नहीं होती है।
स्रोत
2009-05-27 03:36:21
मैं एक लंबे समय के लिए इस चाहता था देखें के बाद से मैं autopair.el _very_ धीमी गति से लगता है। पेरेडिट अब 'सी-मोड 'में एक आकर्षण की तरह काम करता है। धन्यवाद! :) –
के लिए मोड विशिष्ट जा रहा है, एक भी लिख सकते हैं '(defvar-स्थानीय मेरी-paredit-नो-डालने अंतरिक्ष शून्य)' और 'उपयोग (और ... मेरी-paredit-नो-डालने अंतरिक्ष) की' बजाय '(और ... (memq major-mode '(c-mode lisp-mode)))) और फिर' my-paredit-no-insert-space' को' c-mode-common- से 't' पर सेट करें। hook'। इस तरह अंतर प्राथमिकताओं वाले दो लोग 'paredit-space-for-delimiter-p' –
' की एक ही नई परिभाषा का उपयोग कर सकते हैं, यदि आप कुछ और मोड विशिष्ट चाहते हैं, तो आप उस स्थिति और कथन में कुछ शर्तों को जोड़ सकते हैं - मैं चाहता हूं कुछ तरीकों से इसे ओवरराइड न करें, लेकिन मुझे समझ में नहीं आता कि कौन सा 'if' कथन मैं शर्त जोड़ सकता हूं। क्या आप स्पष्ट कर सकते हैं? – Max