2011-09-26 13 views
12

ncurses जैसे कई पुस्तकालय हैं जो कमांड लाइन जीयूआई बनाने में सहायता करते हैं।कैसे ncurses et। अल। काम?

बस शब्दों में कहें, वे कैसे काम करते हैं?

मेरा पहला विचार यह था कि ncurses सभी कीबोर्ड इनपुट को रोकता है, और सामान्य रूप से इसे लाइन-बाय-लाइन आउटपुट करके प्रत्येक "फ्रेम" खींचता है। हालांकि, निकटतम निरीक्षण से पता चलता है कि प्रत्येक नया फ्रेम पिछले एक को ओवरराइट करता है। यह उन पंक्तियों को कैसे संशोधित करता है जो पहले ही आउटपुट किए जा चुके हैं? इसके अलावा, यह रंग कैसे संभालता है?

संपादित करें: एक ही प्रश्न "फैंसी" इंटरफेस के साथ कुछ भी लागू होता है, जैसे vim और emacs

उत्तर

14

पाठ टर्मिनलों आदेश दृश्यों कि स्क्रीन पर एक विशेष स्थिति के लिए कर्सर ले जाने, वर्ण डालें, लाइनों आदि

हटाना प्रत्येक टर्मिनल प्रकार अलग है और आदेश दृश्यों के अपने स्वयं के सेट है जैसे कार्य करने के लिए है। ncurses में एक डेटाबेस है (विवरण के लिए देखें)

आंतरिक रूप से एनसीआरएस स्क्रीन के 2 दृश्य बनाए रखता है: वर्तमान सामग्री और मौजूदा लंबित परिवर्तनों के बाद स्क्रीन कैसी दिखानी चाहिए। एक बार जब प्रोग्राम स्क्रीन रीड्रॉ का अनुरोध करता है, तो ncurses वांछित दृश्य की तरह स्क्रीन को अपडेट करने के लिए एक कुशल तरीका की गणना करता है। सटीक वर्ण/कमांड अनुक्रम आउटपुट इस बात पर निर्भर करता है कि टर्मिनल प्रकार किस प्रकार उपयोग में है।

3

श्राप (और ncurses, भी, मुझे लगता है) कर्सर को स्क्रीन पर चारों ओर ले जाकर काम करता है। ऐसी चीजों को करने के लिए नियंत्रण अनुक्रम हैं। कोड को फिर से देखें और आप उन्हें देखेंगे। ये अनुक्रम ASCII नियंत्रण वर्ण नहीं हैं, वे स्ट्रिंग शुरू कर रहे हैं (umm ...) ईएससी, शायद। एक उच्च स्तरीय स्पष्टीकरण के लिए here देखें।

+0

अधिकांश टर्मिनल समर्थन (कुछ) [एएनएसआई एस्केप अनुक्रम] (https://en.wikipedia.org/wiki/ANSI_escape_code)। वे '\ 033 [' जहां '\ 033' वास्तव में ईएससी के साथ शुरू होते हैं। आप उनमें से कुछ को मुद्रित करने के लिए 'echo -e' का उपयोग करके अपने टर्मिनल पर चारों ओर खेल सकते हैं और देख सकते हैं कि क्या होता है। ('रीसेट' (अंधाधुंध टाइप करें और एंटर दबाएं) यदि आप टर्मिनल को अदृश्य में सेट करने में कामयाब रहे हैं तो आपका मित्र होगा ...) – 5gon12eder

संबंधित मुद्दे