ओवरले क्या हैं?
सबसे पहले, वे विशिष्ट वस्तुएं हैं। यह बाद में प्रासंगिक होगा।
जैसा कि आपने स्वयं कहा, वे परतों का प्रतिनिधित्व करते हैं जो बफर के क्षेत्रों के शीर्ष पर लागू होते हैं। इन परतों में पाठ गुण होते हैं, जैसे बफर में वास्तविक पाठ। कोई भी नियमित संपत्ति जो एक ओवरले के पास है, उसके नीचे पाठ पर लागू होती है। हालांकि, कुछ गुण हैं जो ओवरले के लिए विशेष हैं (वे पाठ पर लागू होने पर कुछ भी नहीं करते हैं)।
वे क्यों उपयोगी हैं?
ऊपर जिन दो कारणों से मैंने संकेत दिया है:
वे वस्तु हैं
इसका मतलब है कि आप उन्हें सूचियों में संग्रहीत कर सकते हैं और उन्हें आसानी से संभाल सकते हैं। आप अभी जहां हैं, उन पर नज़र रखने के बिना आप उनके गुणों को बदल सकते हैं। और भी बेहतर, आप उपयोग कर सकते हैं उन्हें जहां चीजें बफर में हैं का ट्रैक रखने के।
स्टीफन का यह जवाब बफर क्षेत्रों का ट्रैक रखने के लिए इस्तेमाल की जा रही ओवरले का एक अच्छा उदाहरण है। यहाँ इसका एक छोटा सा टुकड़ा है।
(let ((ol (make-overlay beg end)))
(overlay-put ol 'evaporate t)
(overlay-put ol 'my--auto-align-regexp regexp)
(push ol my--auto-align-overlays))
यह रिकॉर्ड करने के लिए ओवरले का उपयोग करता है कि कौन से क्षेत्र संरेखित किए जाने हैं, और उनमें से प्रत्येक पर उपयोग करने के लिए कौन-सा regexp है। my--auto-align-overlays
है
एक सूची जहां ओवरले संग्रहीत किए जाते हैं, और उन्हें इस सूची को देखकर आसानी से एक्सेस किया जा सकता है।
इसके विपरीत, यदि हम इसके लिए पाठ गुणों का उपयोग कर रहे हैं (जो संभव है) तो हमारे पास उन्हें एक्सेस करने का कोई आसान तरीका नहीं होगा। आपको पाठ गुणों को खोजने के लिए बफर को पार्स करने की आवश्यकता है।
वे थोड़े अधिक शक्तिशाली हैं
कुछ पाठ-गुण हैं जिनका केवल ओवरले पर प्रभाव पड़ता है। आप मैनुअल पर पूरी सूची पा सकते हैं
। यहाँ शामिल करना बहुत बड़ी बात है, लेकिन यहाँ एक छोटी बात है।
पहले-स्ट्रिंग
इस संपत्ति का मूल्य ओवरले की शुरुआत में डिस्प्ले में जोड़ने के लिए एक स्ट्रिंग है। स्ट्रिंग किसी भी मायने में बफर में दिखाई नहीं देता है - केवल स्क्रीन पर।
लाइन-प्रीफिक्स
यह प्रॉपर्टी डिस्प्ले-टाइम पर प्रत्येक नॉन-कंटीन्यूएशन लाइन को प्रीपेन्ड करने के लिए एक डिस्प्ले स्पेस निर्दिष्ट करती है। ट्रंकेशन देखें।
रैप-प्रीफिक्स
यह प्रॉपर्टी डिस्प्ले-टाइम पर प्रत्येक कंटिन्यू लाइन के लिए प्रीपेंड करने के लिए एक डिस्प्ले स्पेस निर्दिष्ट करती है। ट्रंकेशन देखें।
विशेष रूप से, before-string
संपत्ति आपको 0 चौड़ाई ओवरले के साथ भी बफर के प्रदर्शन को प्रभावित करने की अनुमति देती है। जो कुछ आप पाठ संपत्ति के साथ नहीं कर सकते है। पाठ गुणों के साथ आप जो कुछ भी करते हैं, उसे या तो एक मौजूदा पाठ (जो इस पाठ को छिपा सकता है) पर जाना चाहिए या आपके द्वारा सम्मिलित पाठ के एक नए स्ट्रिंग पर जाना चाहिए (जो बफर की वास्तविक सामग्री को बदल देता है )।
यहाँ उस बारे में एक उदाहरण स्निपेट है। एक अस्थायी बफर पर इसका मूल्यांकन करें।
(overlay-put (make-overlay (point) (point)) 'before-string "Hi there!")
वे कब बुरे हैं?
ओवरले, पाठ गुणों की तुलना में बहुत अधिक मांग (प्रसंस्करण वार) हैं। कुछ प्रासंगिक संचालन (जैसे कि पाठ प्रविष्टि, अगर मैं गलत नहीं हूं) एक बफर में ओवरले की संख्या के लिए आनुपातिक समय लेता हूं। इस कारण से, वे अनुपयुक्त हैं जब आपको बड़ी संख्या में उनकी आवश्यकता होती है। इस मामले में आपको पाठ गुणों से इस्तीफा दे देना चाहिए।
i text properties
, बिल्कुल।