2011-04-27 17 views
14

लिखने के आधुनिक तरीके मैं एक विंडो प्रबंधक लिखने की कोशिश कर रहा हूं। (वास्तव में, मैं एक ओएस और एक संकलक लिखा है, लेकिन उस समय के बगल में है।)विंडो प्रबंधक

Xlib और XCB वास्तव में बुरा,, Win32 मानकों नहीं हैं कम से कम नहीं द्वारा कहते हैं,, लेकिन वे निश्चित रूप से बहुत पुराने हैं और अपने जीवन को आसान बनाने के लिए सभ्य अमूर्तताओं के लिए खुद को अच्छी तरह से उधार नहीं देते हैं। इतना ही नहीं, लेकिन आधुनिक उच्च स्तरीय भाषाओं के लिए अच्छी बाध्यताओं की एक अलग कमी है।

मेरा प्रश्न है: क्या इन सभी निम्न स्तर की चीजें वास्तव में आवश्यक हैं? क्या पुस्तकालय मौजूद हैं जो मेरे लिए सभी गंदे सामान को समाहित कर देगा? मेरे पास एक अस्पष्ट स्मृति है कि प्रबुद्ध लोगों ने ऐसी चीज की है, लेकिन कुछ भी नहीं मिला। या आधुनिक विजेट पुस्तकालयों की तरह कहें, जीडीके में पर्याप्त कार्यक्षमता है कि मुझे एक्सलिब परत को छूने की आवश्यकता नहीं होगी?

जावा बाइंडिंग के साथ कोई भी पुस्तकालयों विशेष रुचि के हैं ...

+0

अच्छा सवाल। क्या आपको बस पिक्सेल-बाय-पिक्सेल प्रतिपादन क्षमताओं की आवश्यकता नहीं है? इसमें कुछ चाल हो सकती है, लेकिन इस तरह मैं शुरू करूंगा। – Blender

+0

मैं kwin, metacity, compiz और/या ज्ञान को देखता हूं। मेरे हिस्से के लिए, मुझे निम्न स्तर पसंद है, और केवल कच्चे एक्सलिब का उपयोग करके डब्लूएम के किए गए हैं। कुछ भाग्य के साथ, हावॉक पेनिंगटन इस प्रश्न को नोटिस करेगा :) – ninjalj

+0

हास्केल के पास सभ्य एक्स 11 बाइंडिंग हैं जिनका उपयोग विंडो मैनेजर एक्सोनैड लिखने के लिए किया गया था। – wnoise

उत्तर

4

यह देर से उत्तर है, तो शायद यह ' टी अब और अधिक प्रासंगिकता नहीं है, लेकिन मैं इसे किसी भी तरह से पोस्ट करूंगा क्योंकि अन्य लोग इसकी तलाश कर रहे हैं ...

मैंने खुद से एक ही सवाल पूछा है और इस निष्कर्ष पर पहुंचा है कि ऐसी कोई चीज़ नहीं है, खासकर जावा में नहीं । जबकि कुछ विजेट टूलकिट, जैसे कि क्यूटी, आपको मौजूदा डिस्प्ले स्ट्रक्चर का उपयोग करने और मौजूदा xlib विंडो हैंडल से विजेट बनाने की संभावना प्रदान करते हैं, फिर भी आपको एक्स सर्वर के साथ संचार करने की ग़लत नौकरी करने के लिए xlib/xcb का उपयोग करना होगा। डब्ल्यूएम विशिष्ट संचालन। अन्य पुस्तकालयों, जैसा कि दूसरों द्वारा बताया गया है, जैसे कि जीडीके और ज्ञान भी बुनियादी अमूर्तता का एक अच्छा काम प्रदान करते हैं।

फिर भी, मैं इस तथ्य से खुश नहीं था कि इनमें से सभी सी/सी ++ का उपयोग करते हैं और मेरे आलसी गधे पर बैठे हैं जब तक कि जावा में मेरे लिए कोई काम नहीं करता, मैं एक विकल्प नहीं था, मैंने अपनी लाइब्रेरी लिखना शुरू किया जो आपको जावा में अपना मॉड्यूलर डब्ल्यूएम बनाने की अनुमति देता है। https://github.com/Zubnix/trinityshell

+0

मुझे यह देखने में बहुत दिलचस्पी है। अभी मैं अन्य सामानों में डूबा हुआ हूं, लेकिन भविष्य में मुझे निश्चित रूप से एक नजर आएगी। हमें बताएं कि आपके द्वारा किस प्रकार प्रबंध किया जाता है! –

9

इन दिनों यह सब निम्न स्तर के सामान वास्तव में जरूरी है?

यदि "निम्न-स्तर की सामग्री" से आपका मतलब सी भाषा है तो नहीं, तकनीकी दृष्टिकोण से यह आवश्यक नहीं है; आप किसी भी भाषा के लिए बाइंडिंग उत्पन्न करने के लिए एक्ससीबी के XML का उपयोग कर सकते हैं।

हालांकि, यदि "निम्न-स्तरीय सामान" से आपका मतलब एक्स प्रोटोकॉल स्तर पर व्यवहार करना है, तो हाँ, यह आवश्यक है (यदि आप अपने बालों को खींचना नहीं चाहते हैं)। एक विंडो प्रबंधक को एक्स 11 प्रोटोकॉल स्तर पर काम करना चाहिए, इसलिए कुछ "उच्च स्तर" का उपयोग करके केवल आपके जीवन को मुश्किल बना दिया जाएगा। वास्तव में, एक्ससीबी ठीक से बनाया गया था क्योंकि एक्सलिब बहुत उच्च स्तर पर था, बहुत नीचे मुखौटा था, इसलिए गलतियों को करना आसान था, और इसे पूर्ण नियंत्रण रखना मुश्किल या असंभव बना रहा। (इसके अलावा, एक्ससीबी एक्स एक्स परिप्रेक्ष्य से "बहुत पुराना" नहीं है; यह केवल पिछले कुछ सालों में है कि सभी प्रमुख लिनक्स वितरण अंततः एक्ससीबी का उपयोग करके पूरी तरह से शुरू हो गए।)

+1

अच्छा उत्तर। सबसे अच्छा उच्च स्तरीय दृष्टिकोण शायद मौजूदा डब्ल्यूएम से शुरू होना है। भी, जावास्क्रिप्ट का उपयोग करने में gnome-shell का पालन करने का विकल्प हो सकता है।एक्ससीबी और गोबजेक्ट-आत्मनिरीक्षण दोनों आपको भाषा बाइंडिंग स्वचालित करने के लिए टूल देते हैं यदि आपके पास एक और भाषा है। –

+0

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

+1

मैं सम्मान से असहमत हूं: खिड़की प्रबंधकों के लिए बहुत कुछ प्रतीत नहीं होता है जो विशेष विंडो प्रबंधक घटनाओं और XGrabKey() के अलावा विशेष रूप से विदेशी हैं। असल में, चूंकि मैंने अपना प्रश्न पोस्ट किया है, इसलिए मैं जीडीके के साथ हैकिंग कर रहा हूं, और यह * बहुत करीब * मुझे बहुत कुछ करता है; मेरे पास कोड है जो लगभग पूरी तरह से GdkWindow डोमेन से विंडोज़ (एक बहुत ही प्राचीन तरीके से) का प्रबंधन करता है। हां, जो चीजें नहीं करतीं वे बहुत ही बदसूरत हैं। विशेष रूप से, जीडीके कीबोर्ड इनपुट के साथ बहुत अजीब चीजें करता है और यदि XInput उपलब्ध है तो KeyPress और KeyRelease को अनदेखा कर देगा। अनुमान लगाएं कि कौन सी घटनाएं XGrabKey() भेजती हैं? सही। –

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