यह थोड़ा जटिल प्रश्न है। मैं आपके सवालों के जवाब देने की कोशिश करूंगा, लेकिन पहले एक सामान्य विवरण:
स्क्रॉलबैक बफर आपके टर्मिनल एमुलेटर ( xterm
, कोनो कंसोल, GNOME टर्मिनल) द्वारा कार्यान्वित किया जाता है । इसमें वह सभी पाठ शामिल हैं जो स्क्रीन पर प्रदर्शित किए गए हैं, जिसमें टर्मिनल में चलने वाले प्रत्येक प्रोग्राम से मानक आउटपुट और मानक त्रुटि दोनों शामिल हैं। यह पूरी तरह से टर्मिनल कार्यक्षमता है जो आपको पिछले आउटपुट को देखने देती है जो आपके अतीत को स्क्रॉल कर सकती है या जो कुछ पहले कहा था उस पर जांच करने के लिए।
आप स्क्रॉलबैक बफर को लॉग इन आउटपुट के लंबे पृष्ठ के रूप में और अपने टर्मिनल विंडो को किसी भी एक समय में इसके एक हिस्से के रूप में देख सकते हैं। यदि आपने कोई स्क्रॉल नहीं किया है, तो आप जो देख रहे हैं, वह बफर का टेल एंड है। आम तौर पर टर्मिनल में कॉन्फ़िगर की गई एक सीमा होगी कि वह भूल जाने से पहले कितनी लाइनों को ट्रैक करता है।
मान लीजिए कि सीमा 1000 लाइनें है। अपने सत्र में आउटपुट की पहली हज़ार पंक्तियों के लिए आप बस बफर को जोड़ते हैं, और आप अपने सत्र की शुरुआत तक सही स्क्रॉल कर सकते हैं। जैसे ही आउटपुट की 1001 वीं पंक्ति प्राप्त होती है बफर में पहली पंक्ति मिट जाती है, और सबसे पीछे की ओर आप स्क्रॉल कर सकते हैं जो आपके सत्र की दूसरी पंक्ति होगी। बफर में हमेशा आउटपुट की सबसे हालिया लाइनें शामिल होंगी जो आपकी स्क्रीन पर प्रदर्शित की गई थीं, और आप किसी भी समय पहले के आउटपुट को देखने के लिए स्क्रॉल कर सकते हैं।
क्या इसका अर्थ "फ़ंक्शन" "सबरूटीन" के रूप में या "फ़ीचर" के रूप में है?
यह "सुविधा" के रूप में "फ़ंक्शन" है। टर्मिनल एमुलेटर में एक कार्यक्षमता होती है जो स्क्रीन पर क्या रिकॉर्ड करती है और आपको इसमें ऊपर और नीचे स्क्रॉल करने की सुविधा देती है। कुछ सिस्टम पर कंसोल सीमित स्क्रॉलबैक का भी समर्थन करते हैं।
screen
मिश्रण में फेंकने पर यह थोड़ा और अधिक जटिल हो जाता है । उस बिंदु पर, screen
स्वयं स्क्रॉलबैक बफर का अनुकरण किया जा रहा है - यही कारण है कि आप इसे (केवल) एक्स चयन के बजाय कार्यक्रम के भीतर से कॉपी और पेस्ट कर सकते हैं।
क्या इस स्क्रॉलबैक बफर के लिए एक यूनिक्स मानक या एपीआई है?
संक्षिप्त उत्तर नहीं है, यह सिर्फ आपके टर्मिनल द्वारा प्रदान किया गया है। लंबे समय तक जवाब हम तल पर प्राप्त करेंगे।
कार्यक्रमों के "स्टैक" में, जैसे कि vim को स्क्रीन में लॉन्च किए गए bash में लॉन्च किया गया ssh में एक टर्मिनल एमुलेटर में लॉन्च किया गया है, इनमें से कौन सा प्रोग्राम स्क्रॉलबैक बफर को नियंत्रित कर रहा है?
के मामले में vim
और bash
, वे इसे नियंत्रित नहीं कर रहे हैं (चेतावनी, फिर से, नीचे)। आपका टर्मिनल आपके शेल से शुरू होकर, इसके अंदर के सभी कार्यक्रमों के लिए स्क्रॉलबैक बफर प्रदान करता है। screen
, जैसा कि ऊपर बताया गया है, स्क्रोलबैक का अनुकरण स्वयं कर रहा है।
मैंने स्क्रोलबैक को फ़ाइल में डंप करने के लिए स्क्रीन का भी उपयोग किया है। इस फ़ाइल में शीर्ष पर बहुत सी सफ़ेद जगह थी, और ऐसा लगता है कि मेरा टर्मिनल एमुलेटर "व्यू" मुझे दिखाता है बस बफर की कुछ पंक्तियाँ है।
यह screen
आंतरिक बफर है। उस समय आपकी स्क्रीन पर क्या होगा आमतौर पर बफर के बहुत नीचे क्या होता है।
क्या इसीलिए विम जैसा प्रोग्राम मेरी पूरी टर्मिनल विंडो को "क्लियर" कर सकता है, क्योंकि इसे पेरेंट शेल के स्क्रॉलबैक बफर में अस्थायी एक्सेस मिलता है?
यहाँ एक हिस्सा है जहाँ यह बहुत अधिक जटिल हो जाता है। वस्तुतः सभी एक्स-आधारित टर्मिनल एमुलेटर एक वीटी 100 का अनुकरण कर रहे हैं, और एक चीज जो वे करते हैं वह एक "वैकल्पिक स्क्रीन बफर" का समर्थन है । अनुक्रमिक आउटपुट के साथ अधिकांश टर्मिनल इंटरैक्शन के लिए उपयोग किए जाने वाले साधारण बफर के विपरीत, वैकल्पिक स्क्रीन बफर आपके टर्मिनल का सटीक आकार है। इसमें ऊपर या नीचे कोई स्क्रॉलिंग नहीं है क्योंकि यह प्रदर्शित किए जाने वाले से बड़ा नहीं है।
विचार यह है कि एक फुल-स्क्रीन एप्लिकेशन को वह करने की अनुमति दी जाए जो आपके द्वारा पहले से ही स्क्रीन पर मौजूद किसी भी चीज से हस्तक्षेप किए बिना करने की आवश्यकता है, और फिर आपको आपके द्वारा पहले प्रदर्शित डिस्प्ले पर वापस जाने के लिए। इसीलिए जब आप इसमें प्रवेश vim
करते हैं तो पूरी स्क्रीन भर जाती है, लेकिन जब आप इसे छोड़ देते हैं तो आपके द्वारा पहले से जारी टर्मिनल आउटपुट - आपके सभी पिछले संकेत और कमांड आउटपुट - फिर से वापस आ जाता है। vim
वैकल्पिक स्क्रीन बफर में स्विच जब यह शुरू होता है और सामान्य बफर में वापस आता है जब यह बाहर निकलता है।
यह वैकल्पिक बफर मेरे द्वारा उल्लिखित कैवियट में से एक है। कभी-कभी, प्रोग्राम वास्तव में टर्मिनल को यह बताने की क्षमता रखता है कि बफर के साथ क्या करना है।
screen
एक और प्रोग्राम है जो ऐसा करता है, यही कारण है कि आपके टर्मिनल की स्क्रॉलिंग कार्यक्षमता आमतौर पर काम नहीं करती है जब आप एक स्क्रीन सत्र में होते हैं - screen
स्क्रॉलबैक बफर का स्वयं अनुकरण करता है, इसलिए आपको पुराने आउटपुट के लिए इसकी आंतरिक कार्यक्षमता का उपयोग करना होगा।
या अपने स्वयं के स्क्रॉलबैक बफर का उपयोग नहीं करता है जो कि किसी भी तरह से मूल स्क्रॉलबैक बफर के शीर्ष पर होता है?
मैंने ज्यादातर इसका उत्तर पिछले प्रश्न में दिया है, लेकिन इस विशेष प्रश्न का संक्षिप्त उत्तर यह है कि vim
टर्मिनल से बिना किसी स्क्रॉलबैक के, अपना अस्थायी बफर प्राप्त करता है, और फिर आंतरिक रूप से आपके सभी दस्तावेजों की अपनी स्क्रॉलिंग करता है।
उन सभी अपवादों का मैंने उल्लेख किया है:
यह फिर से थोड़ा और अधिक जटिल हो जाता है। मैंने कहा कि एप्लिकेशन का स्क्रॉलबैक पर कोई नियंत्रण नहीं है और यह पूरी तरह से टर्मिनल द्वारा प्रदान किया गया है। कुछ मामलों में, कुछ टर्मिनलों के साथ, सीमित बातचीत होती है। प्रोग्राम कुछ भागने के दृश्यों को प्रिंट करता है - यदि आपने कभी अतीत में मैन्युअल रूप से टर्मिनल कलरिंग का उपयोग किया है, तो आपने देखा होगा कि वे क्या दिखते हैं - और टर्मिनल उन लोगों की व्याख्या कर सकता है और उनके व्यवहार को बदल सकता है, या प्रोग्राम को वापस जानकारी भी भेज सकता है। जो एस्केप सीक्वेंस उपलब्ध हैं, उन्हें टर्मकैप (टर्मिनल क्षमता) डेटाबेस में वर्णित किया गया है ।
कुछ टर्मिनल स्क्रॉलबैक बफर के सीमित क्वेरी और हेरफेर का समर्थन करते हैं। कई xterm
व्युत्पन्न दृश्यों से बच निकलते हैं जो टर्मिनल को अपने दृश्य को स्क्रॉल करने के लिए निर्देशित करते हैं। कई टर्मिनलों को स्क्रॉल करने के लिए स्क्रीन के किसी विशेष क्षेत्र को निर्दिष्ट करने का भी समर्थन किया जाता है, बाकी सभी को बरकरार रखते हुए। यह स्क्रॉलबैक बफ़र को तोड़ता है।
लगभग सभी टर्मिनल स्क्रीन के चारों ओर कर्सर को स्थानांतरित करने के लिए दृश्यों का समर्थन करते हैं, जो कि कैसे ncurses
पुस्तकालय प्रदर्शन के सभी विभिन्न हिस्सों को अपडेट करने में सक्षम है। आप VT100 द्वारा समर्थित दृश्योंxterm
को देख सकते हैं । जिस तरह से ये स्क्रॉलबैक बफर के साथ इंटरैक्ट करते हैं, वह कई बार थोड़ा अजीब हो सकता है, विशेष रूप से ऐसी चीज के मामले में जो less
कमांड की तरह अपने स्क्रॉलिंग व्यवहार को लागू करता है । आप अपने स्क्रॉलबैक में डुप्लिकेट या लापता लाइनों के साथ समाप्त कर सकते हैं क्योंकि less
आपके टर्मिनल ने अपेक्षा नहीं की थी कि एक तरह से शीर्ष पर पाठ को फिर से तैयार किया। अन्य कार्यक्रम कभी-कभी आपके पूरे प्रदर्शन की कई प्रतियों के साथ आपके बफ़र को समाप्त करते हैं।