2012-06-13 15 views
19

वैकल्पिक स्क्रीन कई "उपयोगकर्ता-इंटरैक्टिव" टर्मिनल अनुप्रयोगों जैसे विम, हॉप, स्क्रीन, अलसमैमर, कम, द्वारा उपयोग किया जाता है ... यह एक अलग बफर की तरह है टर्मिनल सामग्री, जो एप्लिकेशन से निकलती है, गायब हो जाती है, इसलिए पूरा टर्मिनल बहाल हो जाता है और ऐसा लगता है कि एप्लिकेशन ने कुछ भी आउटपुट नहीं किया है।एक बैश स्क्रिप्ट में "वैकल्पिक स्क्रीन" का उपयोग

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

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

हालांकि, मुझे man terminfo में ऐसी क्षमता नहीं मिल रही है। लेकिन हो सकता है कि मैं इसके लिए एक समाधान खोजने के गलत रास्ते पर हूं। शायद terminfo/tput मेरे दोस्त नहीं है।

तो (कैसे) मैं बैश स्क्रिप्ट में वैकल्पिक स्क्रीन का उपयोग कर सकता हूं? क्या किसी को एक साधारण एप्लिकेशन पता है जिसमें स्रोत कोड मुझे संकेत मिल सकता है? (सी आवेदन या बैश स्क्रिप्ट या जो कुछ भी ...)

उत्तर

29

आप इस आदेश का उपयोग वैकल्पिक स्क्रीन पर स्विच कर सकते हैं:

$ tput smcup 

और पीठ के साथ:

$ tput rmcup 

इन आदेशों सिर्फ उत्पादन आपके टर्मिनल के लिए उपयुक्त बचने के अनुक्रम। अधिक जानकारी के लिए टर्मिनल नियंत्रण आदेशों man 5 terminfo देख

$ echo -e "\e[?1049l" 

: यदि यह एक xterm है वे (अधिक जाना जाता है लेकिन कम सुरुचिपूर्ण या पोर्टेबल) के बराबर हो जाएगा:

$ echo -e "\e[?1049h" 

और।

+0

आह में है। एक जादू की तरह काम करता है। धन्यवाद! :) – leemes

+0

@leemes - दरअसल, अपने प्रश्न को दोबारा पढ़ना, आप 'ti' टर्मिनल क्षमता की बात करते हैं ... लेकिन यदि आप 'मैन टर्मिनो' में ध्यान से देखते हैं, तो यह सिर्फ 'smcup' का टर्मकैप नाम है !!! – rodrigo

+0

लॉल? मैं * कसम खाता हूं कि मैंने 'ti' की खोज की है (जैसा कि प्रश्न में उल्लिखित है) और क्षमता नहीं मिली! अरे ... -.- – leemes

2

सी सांत्वना आवेदन के लिए:

ncurses

विकिपीडिया:

ncurses (नई शाप) है कि एक एपीआई जो प्रोग्रामर पाठ आधारित लिखने के लिए अनुमति देता है प्रदान करता है एक प्रोग्रामिंग पुस्तकालय है टर्मिनल-स्वतंत्र तरीके से उपयोगकर्ता इंटरफेस करता है।

less इस लाइब्रेरी का उपयोग करता है।

here से एक हैलो वर्ल्ड प्रोग्राम, इसे जीसीसी में संकलित करने के लिए, ध्वज-lncurses की आवश्यकता है।

#include <ncurses.h> 

int main() 
{ 
    initscr();   /* Start curses mode   */ 
    printw("Hello World !!!"); /* Print Hello World   */ 
    refresh();   /* Print it on to the real screen */ 
    getch();   /* Wait for user input */ 
    endwin();   /* End curses mode  */ 

    return 0; 
} 
+2

** हालांकि, मैं कुछ बाहरी स्क्रिप्टिंग भाषा (या सी जैसे कुछ भी) का उपयोग नहीं करना चाहता हूं। ** –

4

smcup/rmcup उपयोग किया जाता है, लेकिन केवल पक्ष प्रभाव के लिए: एस्केप अनुक्रम जो सामान्य/वैकल्पिक स्क्रीन के बीच स्विच आमतौर पर उन terminfo क्षमताओं में अंतर्निहित है - हमेशा नहीं।

कुछ पृष्ठभूमि, अच्छी तरह से अच्छी तरह से टर्म फैक Why doesn't the screen clear when running vi?