खिड़की के स्थान पर अस्थायी पाठ को सही / ओवरले करने के लिए कोई पाठ नहीं है?


9

प्रश्न: मैं स्क्रीन पर स्थानों में अस्थायी रूप से पाठ को कैसे दिखा सकता हूं जिसमें कोई पाठ नहीं है जो सही / ओवरले करने के लिए पाठ नहीं है?

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

यहाँ एक उदाहरण के लिए एक स्क्रीनशॉट है:

यहाँ छवि विवरण दर्ज करें

स्क्रीनशॉट में लाल बक्से में से एक में (अस्थायी रूप से) टेक्स्ट कैसे डाला जा सकता है, यानी पाठ के दाईं ओर रिक्त स्थान, या बफर में अंतिम पंक्ति के नीचे?


संक्षेप में, आप पाठ को प्रदर्शित करने के लिए प्रदर्शन संपत्ति का उपयोग कर सकते हैं जो वहां नहीं है। मेरे घर पहुंचने से पहले कोई व्यक्ति इसका पूरा जवाब दे सकता है।
मालाबार 16

कंपनी-मोड, टेक्स्ट पर या तो ओवरले डालने का काम करता है, अगर डिस्प्ले प्रॉपर्टी के साथ या उसके बाद के बिंदु के साथ पर्याप्त है, तो वैकल्पिक रूप से यह बफर के अंत के नीचे कुछ प्रदर्शित करने के लिए स्ट्रांग संपत्ति का उपयोग करता है। मैं पक्ष में कुछ प्रदर्शित करने के बारे में कम निश्चित हूं, लेकिन यह ओवरले की सही चौड़ाई और स्थिति के साथ संभव प्रतीत होता है।
13

क्या आप insertबफर में सिर्फ टेक्स्ट नहीं कर सकते और उसे ठीक कर सकते हैं ?
रेकाडो

जवाबों:


6

मैंने एक फंक्शन का एक कार्यशील उदाहरण दिया है जो एक स्ट्रिंग लेता है और बफर टेक्स्ट के बाद इसे टाइमआउट के साथ अस्थायी रूप से प्रदर्शित करता है:

(defun my-momentarily-display-after-buffer-end (string &optional timeout)
  (let ((ov (make-overlay (point-max) (point-max))))
    (overlay-put ov 'after-string
                 (concat (propertize " " 'display
                                     '(space :align-to (+ left-fringe 10)))
                         (propertize string 'display
                                     '(raise -1))
                         "\n\n"))
    (sit-for (or timeout 5))
    (delete-overlay ov)))

निम्नलिखित भस्म का परिणाम आपके निचले लाल बॉक्स उदाहरण में होगा:

(my-momentarily-display-after-buffer-end "Nothing to see here...")

इसका कारण यह है क्योंकि ओवरलेज़ मार्करों को बीच प्रदर्शित होने वाले पदों के रूप में उपयोग करते हैं। ओवरले की शुरुआत और अंत के रूप में सबसे बाहरी स्थिति का उपयोग करना आपको संपत्ति का उपयोग करके इसके बाद पाठ प्रदर्शित करने में सक्षम बनाता after-stringहै। चूंकि ओवरले में उचित पाठ हो सकता है, इसलिए मैंने इसे इंडेंटेड और इसके चारों ओर व्हाट्सएप के साथ सेट करने के लिए सेट किया है।

अन्य उदाहरण पंक्ति के अंत के बाद पाठ प्रदर्शित करने के लिए एक ही विचार का उपयोग कर सकते हैं:

(defun my-momentarily-display-after-line-end (string &optional timeout)
  (let ((ov (make-overlay (line-end-position) (line-end-position))))
    (overlay-put
     ov 'after-string
     (concat (propertize " " 'display
                         `(space :align-to (- right-fringe
                                              ,(1+ (length string)))))
             string))
    (sit-for (or timeout 5))
    (delete-overlay ov)))

निम्नलिखित मंगलाचरण आपके दाईं ओर लाल बॉक्स उदाहरण के रूप में होगा:

(my-momentarily-display-after-line-end "annotation")

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


2

आप अस्थायी रूप से फ़ंक्शन के साथ बफर में पाठ प्रदर्शित कर सकते हैं momentary-string-display। यह प्रदर्शित करने के लिए एक संदेश और बफर में एक स्थिति लेता है।

इस:

(momentary-string-display "hello there" 200)

बफर में स्थिति 200 पर स्ट्रिंग "हैलो" रखें। यह "हेलो दुनिया" के लिए जगह बनाने के लिए इस बिंदु पर अन्य सभी पाठ को स्थानांतरित करेगा, लेकिन जब आप किसी भी कुंजी को मारते हैं तो सब कुछ बहाल हो जाएगा।

आपको ओवरले बनाने के लिए बफर में पाठ की आवश्यकता नहीं है, हालांकि यह पाठ-गुणों के लिए एक आवश्यकता है। यहां पर शून्य चौड़ाई के साथ एक ओवरले है जिसके परिणामस्वरूप अतिरिक्त पाठ प्रदर्शित किया जाता है:

(let ((ov (make-overlay 1 1)))
  (overlay-put ov 'before-string "this text is not part of the buffer"))

ध्यान दें कि यह ओवरले बफर टेक्स्ट को दूर धकेल देगा; यह दिए गए स्थान पर पाठ को कवर नहीं करेगा।

ऐसा लगता नहीं है कि बफर में किसी भी स्थिति में एक ओवरले रखना संभव है point-max/ से अधिक है buffer-size, अर्थात, आप संभवतः बफर टेक्स्ट के नीचे कुछ विशिष्ट स्थिति में पाठ को रखने में सक्षम नहीं होंगे जब तक कि आप इस प्रतिबंध के आसपास हैक नहीं करते। आप निश्चित रूप after-stringसे point-maxस्थिति के लिए पिन किए गए ओवरले पर संपत्ति के साथ बफर टेक्स्ट के ठीक बाद टेक्स्ट रख सकते हैं ।

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