2011-12-31 11 views
8

मैं एक एनसीआरएसईएस एप्लीकेशन विकसित कर रहा हूं जो init_color() के माध्यम से अपने पैलेट का उपयोग करता है (can_change_colors() मानते हुए शून्य-शून्य)। यदि COLORS 256 से कम है, तो मैं केवल पहले 8 रंगों को संशोधित करता हूं (माना जाता है कि COLORS कम से कम 8 है)। अन्यथा, मैं पहले 256 तक संशोधित करता हूं।मूल टर्मिनल पैलेट कैसे अधिग्रहित किया जा सकता है, अधिमानतः ncurses दिनचर्या का उपयोग कर?

ncurses प्रलेखन का दावा है कि stdscr पर पैलेट रीसेट करेगा। हालांकि, जीनोम टर्मिनल में, मुझे एनसीआरएस द्वारा बहाल पैलेट नहीं दिख रहा है। इसके बजाए, जो भी पैलेट मैंने पिछली बार उपयोग किया वह मेरे आवेदन से बाहर ले जाया गया है। मेरा पहला सवाल, यही कारण है कि पैलेट को ठीक तरह से बहाल नहीं किया जा रहा है (बाकी सब कुछ - कर्सर स्थान, स्क्रीन टेक्स्ट, आदि - है)।

स्टार्टअप पर पैलेट प्राप्त करके और इसे मैन्युअल रूप से बहाल करके मैं इस पर काम कर सकता हूं (मुझे पता है कि यह पहले ही संदिग्ध है)। मैं start_color() पर एक सफल कॉल के बाद color_content() लूप के साथ ऐसा करने का प्रयास कर रहा हूं। दुर्भाग्यवश, ऐसा लगता है कि डिफ़ॉल्ट ncurses पैलेट वापस नहीं है, वास्तव में पैलेट का उपयोग नहीं किया जा रहा है (जीनोम टर्मिनल के डिफ़ॉल्ट पैलेट के साथ परीक्षण किया गया है, और एक कॉन्फ़िगर किया गया सौरकृत पैलेट)। मैंने डेबियन के ncurses-5.9 स्रोतों से ncurses/base/lib_color.c में मानों के विरुद्ध जांच करके इसे सत्यापित कर लिया है।

तो:

  • क्यों नहीं पैलेट endwin(stdscr) के लिए एक सफल कॉल द्वारा पुनर्स्थापित किया जाता है?

  • स्टार्टअप पर "सत्य" पैलेट कैसे प्राप्त कर सकता हूं? Ncurses को प्राथमिकता दी जाती है, लेकिन यूनिक्स- या यहां तक ​​कि लिनक्स-विशिष्ट ioctl() एस आदि अभी भी पर्याप्त होंगे।

प्रासंगिक कोड on Github पाया जा सकता है। वर्तमान में जो कुछ मैंने ऊपर वर्णित किया है उसके साथ बिल्कुल मेल नहीं खा सकता है, क्योंकि मैं बिना सफलता के विभिन्न तकनीकों का प्रयोग कर रहा हूं।

+0

क्या आपने यह सुनिश्चित करने के लिए xterm या कंसोल जैसे अन्य टर्मिनल अनुकरणकर्ताओं में यह कोशिश की है कि आप केवल gnome-terminal से गलत व्यवहार नहीं देख रहे हैं? –

+0

तो, आज की उछाल के साथ, मैं आगे बढ़ गया हूं और कुछ पूर्ण स्रोत डाइविंग किया है। मेरा मानना ​​है कि मेरे पास जवाब (बल्कि निराशाजनक) हैं: –

उत्तर

2

तो, आज की उछाल के साथ, मैं आगे बढ़ गया हूं और कुछ पूर्ण स्रोत डाइविंग किया है। मेरा मानना ​​है कि मेरे पास (बल्कि निराशाजनक) उत्तर हैं:

(1) एंडविन() पैलेट को रीसेट कर रहा है, लेकिन ऐसा लगता है कि यह TERM मान के लिए terminfo कॉन्फ़िगरेशन से परिभाषा को रीसेट कर रहा है। किसी भी एप्लिकेशन द्वारा पैलेट परिवर्तन पोर्टेबल रूप से टर्मिनो डेटाबेस (स्पष्ट रूप से) या संदर्भ (बल्कि दुर्भाग्य से) में लिखे गए नहीं हैं, और इस प्रकार अनुप्रयोगों में ncurses के लिए अनुपलब्ध हैं।

(2) ऐसा करने का कोई सामान्य तरीका नहीं है। सबूत विरोधाभास से है, और सीधे (1) से पालन करता है।

हां, गरीब योरिक! अनंत जेस्ट का एक साथी।

जब तक कोई मुझे मेरे दिमाग से बाहर नहीं दिखाता, तो मुझे लगता है कि यह प्रश्न हल हो गया है।

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