ओवरले क्या हैं, और वे पाठ गुणों से कैसे भिन्न हैं?


23

मैनुअल कहता है:

प्रस्तुति सुविधाओं के लिए, आप स्क्रीन पर एक बफर के पाठ की उपस्थिति को बदलने के लिए ओवरले का उपयोग कर सकते हैं।

इसके नाम से, यह पता चलता है कि इसका उपयोग मौजूदा पाठ के ऊपर "परतें" बनाने के लिए किया जा सकता है, लेकिन उपरोक्त विवरण से यह प्रतीत होता है कि यह पाठ की उपस्थिति को बदल देता है, जो पाठ गुणों के समान है।

ओवरले का एक ठोस उपयोग क्या है? वे क्या पेशकश करते हैं कि पाठ गुण नहीं है? क्या उनका उपयोग किसी पॉपअप, सूचना बॉक्स, जैसे बफर में टेक्स्ट पर टेक्स्ट लिखने के लिए किया जा सकता है?


केवल एक वाक्य से अधिक उस मैनुअल सेक्शन को पढ़ें। यह बहुत स्पष्ट रूप से समझाया गया है, IMO। पाठ गुणों से अंतर भी शामिल है। यह भी देखें (उसी मैनुअल में) i text properties, बिल्कुल।
आकर्षित किया

जवाबों:


10

ओवरले क्या हैं?

सबसे पहले, वे विशिष्ट वस्तुएं हैं। यह बाद में प्रासंगिक होगा।

जैसा कि आपने स्वयं कहा, वे परतों का प्रतिनिधित्व करते हैं जो बफर के क्षेत्रों के शीर्ष पर लागू होते हैं। इन परतों में पाठ गुण होते हैं, जैसे बफर में वास्तविक पाठ। कोई भी नियमित संपत्ति जो एक ओवरले के पास है, उसके नीचे पाठ पर लागू होती है। हालांकि, कुछ गुण हैं जो ओवरले के लिए विशेष हैं (वे पाठ पर लागू होने पर कुछ भी नहीं करते हैं)।

वे क्यों उपयोगी हैं?

ऊपर जिन दो कारणों से मैंने संकेत दिया है:

वे वस्तु हैं

इसका मतलब है कि आप उन्हें सूचियों में संग्रहीत कर सकते हैं और उन्हें आसानी से संभाल सकते हैं। आप अभी जहां हैं, उन पर नज़र रखने के बिना आप उनके गुणों को बदल सकते हैं। और भी बेहतर, आप उपयोग कर सकते हैं उन्हें जहां चीजें बफर में हैं का ट्रैक रखने के।

स्टीफन का यह जवाब बफर क्षेत्रों का ट्रैक रखने के लिए इस्तेमाल की जा रही ओवरले का एक अच्छा उदाहरण है। यहाँ इसका एक छोटा सा टुकड़ा है।

(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!")

वे कब बुरे हैं?

ओवरले, पाठ गुणों की तुलना में बहुत अधिक मांग (प्रसंस्करण वार) हैं। कुछ प्रासंगिक संचालन (जैसे कि पाठ प्रविष्टि, अगर मैं गलत नहीं हूं) एक बफर में ओवरले की संख्या के लिए आनुपातिक समय लेता हूं। इस कारण से, वे अनुपयुक्त हैं जब आपको बड़ी संख्या में उनकी आवश्यकता होती है। इस मामले में आपको पाठ गुणों से इस्तीफा दे देना चाहिए।


12

ओवरले और टेक्स्ट गुणों में बिल्कुल समान क्षमताएं हैं। वे पाठ के एक विशिष्ट भाग में परिवर्तन मार्जिन, बटन, चेहरे, फ्रिंज आइकन, टूलटिप्स, चित्र, हाइलाइट आदि जोड़ते हैं। हालाँकि, एक बड़ा वैचारिक अंतर है:

ओवरले स्वतंत्र हैं , पाठ गुण नहीं हैं। Emacs का एक अलग ओवरले प्रकार है, लेकिन कोई "टेक्स्ट प्रॉपर्टी टाइप" नहीं है। पाठ गुण स्वाभाविक रूप से उस स्ट्रिंग से बंधे होते हैं, जिस पर उन्हें सेट किया गया था। दूसरी ओर ओवरले एक बफर से जुड़े होते हैं।

इस अंतर के कुछ व्यावहारिक निहितार्थ हैं:

  • आप स्ट्रिंग पर पाठ गुण सेट कर सकते हैं जो किसी भी बफर का हिस्सा नहीं हैं, जबकि आपको हमेशा ओवरले के लिए एक बफर की आवश्यकता होती है।
  • आप अपने द्वारा जोड़े गए पाठ गुणों की एक सूची नहीं रख सकते हैं, जबकि बफर में जोड़े गए ओवरले की सूची को रखना आसान है, और उदाहरण के लिए, अपने सभी ओवरले को एक बार में हटा दें।
  • आपके पास एक एकल ओवरले हो सकता है जो एक पाठ पर कई ओवरले सेट करता है (जैसे एक चेहरा, एक टूलटिप और एक फ्रिंज आइकन), इसलिए आप एक एकल इकाई के रूप में गुणों के "समूह" का प्रबंधन करने के लिए एक ओवरले का उपयोग कर सकते हैं, जबकि कोई भी नहीं है पाठ गुणों के लिए ऐसी बात। आप उन्हें व्यक्तिगत रूप से सेट करते हैं, और आप उन्हें व्यक्तिगत रूप से प्रबंधित करते हैं।

इस सब का सार यह है कि आप पाठ सामग्री से अलग से ओवरले का प्रबंधन कर सकते हैं । वैचारिक रूप से आप उन्हें उन सामानों के लिए उपयोग करेंगे जो आप बफर में दिखाएंगे, भले ही वह पाठ से स्वतंत्र हो।

व्यावहारिक रूप से, आप ओवरले का उपयोग करेंगे यदि सामान जिसे आप अक्सर पाठ परिवर्तनों में जोड़ना चाहते हैं, जबकि यदि सामान स्थिर है तो आप पाठ गुणों का उपयोग करेंगे।

उदाहरण के लिए, Emacs एक M-x customizeबफर में बटन और इनपुट विजेट बनाने के लिए पाठ गुणों का उपयोग करता है । ये विजेट एक बार बनाए जाते हैं, और जब तक बफर जीवित है, तब तक वहां रहें, इसलिए ओवरले में लाने की कोई आवश्यकता नहीं है।

हालाँकि, फ्लाईचेक बफर में त्रुटियों को उजागर करने के लिए ओवरले का उपयोग करता है, क्योंकि इसे अक्सर हाइलाइट्स को हटाने और जोड़ने की आवश्यकता होती है।

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