Dwm एक उत्कृष्ट मिनिमलिस्ट सॉफ्टवेयर है। केवल 2000 लाइनों के कोड के माध्यम से, इसके डेवलपर्स ने एक तेज़ और हल्का विंडो मैनेजर प्रदान किया है। हालांकि, सॉफ्टवेयर विकास के इस स्पार्टन दृष्टिकोण की एक कीमत भी चुकानी पड़ी - प्रोग्राम का आकार छोटा रखने के लिए कई फीचर्स को छोड़ दिया गया।
इसके बावजूद, dwm के सोर्स कोड को पैच करके नए फीचर्स जोड़े जा सकते हैं, क्योंकि dwm सोर्स-आधारित है। यहां तक कि बुनियादी कॉन्फिगरेशन के लिए भी हमें config.h को संशोधित करना पड़ता है, जो dwm के सोर्स कोड का हिस्सा है।
पैच क्या होते हैं?
पैच कोड के छोटे टुकड़े होते हैं जिन्हें बड़े कोडबेस में डाला जा सकता है। यह बड़े सॉफ्टवेयर प्रोजेक्ट पर सहयोग करते समय उपयोगी होता है, क्योंकि यह प्रोग्रामर्स को दूसरों द्वारा किए गए परिवर्तनों को तुरंत देखने की अनुमति देता है।
पैच एक छोटे वन-लाइनर बग फिक्स से लेकर एक बड़े मल्टी-फाइल परिवर्तन तक हो सकते हैं जो एक नया फीचर पेश करते हैं।
dwm के लिए सोर्स कोड को पैच कैसे करें
सोर्स कोड में पैच लागू करने के कई तरीके हैं। सबसे आम तरीका git कमांड के माध्यम से है। उदाहरण के लिए, एक git रिपॉजिटरी में पैच लागू करने के लिए, निम्न टाइप करें:
git apply -3 path/to/the/patch.diff
applyफंक्शन पैच फाइलों की सामग्री को उन सोर्स फाइलों में डालने का प्रयास करता है जो संकेतित हैं।-3विकल्प किसी भी असंगति को ठीक करने का प्रयास करता है और पैचिंग प्रक्रिया में गलतियों को सुधारने की अनुमति देता है।
दूसरी ओर, यदि हम किसी वर्जन कंट्रोल के बिना सोर्स कोड संपादित कर रहे हैं, तो हम GNU पैच प्रोग्राम का उपयोग कर सकते हैं। इसका उपयोग करके पैच डालने के लिए, निम्न टाइप करें:
patch -p1 < path/to/the/patch.diff
-p1विकल्प यह सुनिश्चित करता है कि पैच फाइल पैच प्रोग्राम के लिए सही ढंग से लेबल की गई है।
हालांकि, dwm को पैच करते समय ये प्रोग्राम कभी-कभी विफल हो जाते हैं, क्योंकि वे मानते हैं कि हम जिस सोर्स कोड को पैच कर रहे हैं वह बुनियादी dwm इंस्टॉलेशन के समान है।
इसका अर्थ है कि जैसे-जैसे हम पैच इंस्टॉल करते हैं, पैचिंग प्रोग्राम के लिए उन पैच को डालना उतना ही कठिन होता जाता है। इसलिए, यह समझना महत्वपूर्ण है कि पैच फाइल कैसे काम करती है ताकि हम पैच को मैन्युअली इंस्टॉल कर सकें।
पैच फाइल को कैसे पढ़ें
एक पैच फाइल में तीन चीजें होती हैं:
- हेडर जो दिखाता है कि कोड किस फाइल में डाला जाना चाहिए
- सबहेडिंग जो दिखाता है कि किस लाइन नंबर या फंक्शन में डालना है
- कोड स्वयं
जैसा कि हमने ऊपर चर्चा की, एक पैच फाइल में कई फाइलों के लिए कोड स्निपेट्स हो सकते हैं। यह फॉर्मेट हमें हर सोर्स फाइल के लिए अलग पैच फाइल रखने के बजाय एक ही फाइल वितरित करने की अनुमति देता है।
इसके साथ, पैच फाइल को पढ़ने के लिए केवल उसके हेडर्स के सिंटैक्स को समझने की आवश्यकता होती है। एक बार जब हम इसे जान लेते हैं, तो वास्तविक पैचिंग केवल कोड को कॉपी और पेस्ट करने का मामला रह जाता है।
पैच हेडर सिंटैक्स
पैच का हेडर इस बारे में महत्वपूर्ण जानकारी रखता है कि सोर्स फाइल कहां स्थित है। उदाहरण के लिए, यह dwm ऑटोरिसाइज पैच का हेडर है:
diff --git a/dwm.c b/dwm.c index 0362114..e4e8514 100644 --- a/dwm.c +++ b/dwm.c
पहली, तीसरी और चौथी लाइनें इंगित करती हैं कि यह dwm.c फाइल के दो वर्जन के बीच का अंतर है। यह हमें बताता है कि हम जिस फाइल को संशोधित करने जा रहे हैं वह "dwm.c" फाइल है।
हालांकि, केवल यह जानना कि क्या संपादित करना है, हमें सोर्स फाइल को पैच करने में मदद नहीं करेगा। हमें अभी भी यह जानने की जरूरत है कि फाइल में कोड कहां डालना है। यहीं पर हम पैच फाइल के सबहेडिंग का उपयोग कर सकते हैं।
उदाहरण के लिए, यह ऊपर वर्णित उसी ऑटोरिसाइज पैच का एक खंड है:
@@ -92,7 +92,7 @@ struct Client { int basew, baseh, incw, inch, maxw, maxh, minw, minh; int bw, oldbw; unsigned int tags; - int isfixed, isfloating, isurgent, neverfocus, oldstate, isfullscreen; + int isfixed, isfloating, isurgent, neverfocus, oldstate, isfullscreen, needresize; Client *next; Client *snext; Monitor *mon;
यह डराने वाला लग सकता है, लेकिन हमें यहां केवल तीन चीजों को देखने की जरूरत है:
- पहली लाइन उस लाइन नंबर को इंगित करती है जहां हमें कोड स्निपेट डालना है। इस उदाहरण में, हमें इसे लाइन 92 पर डालना है।
- पहली लाइन का दूसरा आर्गुमेंट -
struct Client {- वह विशिष्ट फंक्शन बताता है जिसे हमें संपादित करना है। यह तब उपयोगी होता है जब सोर्स फाइल पहले से ही भारी पैच की गई हो और बाईं ओर के लाइन नंबर मेल नहीं खाते। - आखिरी चीज कोड ब्लॉक में
+और-चिह्न हैं। माइनस चिह्न इंगित करता है कि यह हटाने वाली लाइन है, और प्लस चिह्न इंगित करता है कि यह जोड़ने वाली लाइन है।
इसके साथ, अब हमें सोर्स फाइलों को पैच करने की बुनियादी समझ हो गई है। अब हम dwm के लिए पांच उपयोगी पैच पर चर्चा कर सकते हैं।
1. सिस्ट्रे (Systray)
अधिकांश डेस्कटॉप वातावरणों के विपरीत, dwm डिफ़ॉल्ट रूप से सिस्टम ट्रे के साथ नहीं आता। सिस्टम ट्रे डेस्कटॉप का एक खंड होता है जहां कुछ एप्लिकेशन ऐप के कार्यों के साथ एक आइकन छोड़ सकते हैं ताकि बैकग्राउंड में चल रहे प्रोग्राम के साथ त्वरित इंटरैक्शन हो सके।
यह पैच dwm में उस फीचर को पेश करता है। एक बार इंस्टॉल हो जाने पर, सिस्ट्रे पैच dwm बार के दाहिने कोने को वर्तमान सिस्ट्रे प्रोग्राम्स के लिए आवंटित करेगा। यह मल्टी-मॉनिटर सेटअप को भी सपोर्ट करता है जहां ट्रे हमेशा उस मॉनिटर पर दिखाई देगी जिसमें वर्तमान में माउस पॉइंटर है।
2. Xresources
Xresources पैच xrdb प्रोग्राम को dwm के लिए ग्राफिकल सेटिंग्स सेट करने में सक्षम बनाता है। यह हमें प्रोग्राम को रीकंपाइल किए बिना .Xresources फाइल का उपयोग करके रंग और फॉन्ट बदलने की अनुमति देता है। यह उन उपयोगकर्ताओं के लिए विशेष रूप से उपयोगी है जो पहले से ही अपने टर्मिनल कलर स्कीम के लिए उसी फाइल का उपयोग करते हैं।
इसके अलावा, dwm की उपस्थिति को निर्देशित करने के लिए xrdb का होना हमें कई थीम का उपयोग करने की अनुमति देता है। हम .Xresources फाइल को वांछित कलर स्कीम के लिए संशोधित करके और dwm को रीलोड करके इसे सक्षम कर सकते हैं।
3. ततामी (Tatami)
ततामी dwm के लिए एक वैकल्पिक विंडो लेआउट है। यह स्क्रीन पर विंडोज को टाइल्स के रूप में दर्शाता है जो पारंपरिक जापानी फर्श की तरह व्यवस्थित होते हैं। यह दृष्टिकोण पारंपरिक मास्टर और स्टैक लेआउट से अलग है, जहां मास्टर के अलावा प्रत्येक विंडो ऊर्ध्वाधर रूप से पतली होती जाती है, जिससे स्टैक में प्रत्येक विंडो अपठनीय हो जाती है।
ततामी लेआउट चार से पांच विंडोज को एक साथ संभालते समय विशेष रूप से उपयोगी होता है, क्योंकि यह प्रत्येक विंडो को पढ़ने के लिए पर्याप्त स्क्रीन स्पेस देता है।
4. फोकस मास्टर (Focus Master)
dwm जिस तरह से विंडोज को व्यवस्थित करता है वह स्टैक में ब्लॉक रखने के समान है। प्रत्येक नई बनी विंडो पिछली विंडो के ऊपर रखी जाती है। यह विंडोज के बीच एक रैखिक क्रम बनाता है और हमें यह जानने की अनुमति देता है कि कौन सी विंडो पहले आई थी।
हालांकि, इस डिजाइन की एक सीमा यह है कि यह हमें स्टैक से मास्टर विंडो को स्वतंत्र रूप से चुनने की अनुमति नहीं देता। मास्टर का चयन करने के लिए, हमें प्रत्येक विंडो का चयन करना पड़ता है जब तक कि हम उच्चतम ब्लॉक तक नहीं पहुंच जाते। यह पैच इस व्यवहार को बदलता है और हमें स्टैक में कहीं से भी वर्तमान मास्टर विंडो का चयन करने की अनुमति देता है।
यह कई विंडोज से निपटते समय विशेष रूप से उपयोगी होता है, क्योंकि यह हमें विंडो स्टैक में मौजूद प्रत्येक विंडो को साइकिल करने के बजाय स्वचालित रूप से मास्टर का चयन करने की अनुमति देता है।
5. dwmc
dwm के किसी भी पहलू को संशोधित करने के लिए हमें प्रोग्राम को रीकंपाइल करना पड़ता है जब भी हम अपने परिवर्तनों को लागू करना चाहते हैं। इसमें कलर स्कीम और डिफ़ॉल्ट व्यवहार शामिल हैं।
dwmc एक सरल पैच है जो हमें एक क्लाइंट प्रोग्राम के माध्यम से dwm के व्यवहार को बदलने की अनुमति देता है। यह दृष्टिकोण उस तरीके के समान है जिस तरह bspwm bspc का उपयोग करके bspwm की सेटिंग्स को संशोधित करता है। हालांकि dwmc bspc की तुलना में कहीं अधिक सरल है, फिर भी इसमें कई उपयोगी सेटिंग्स हैं जिनका हम उपयोग और संशोधन कर सकते हैं।
उदाहरण के लिए, dwmc में हम जिस फंक्शन का उपयोग कर सकते हैं वह है togglebar। dwmc togglebar चलाने से हम डायनामिक रूप से dwm बार को सक्षम और अक्षम कर सकते हैं। यह dwmc को कस्टम विंडो व्यवहार करने वाले स्क्रिप्ट बनाते समय उपयोगी बनाता है।
बधाई हो! अब आपको कोड पैचिंग कैसे काम करती है, इसकी बुनियादी समझ है साथ ही पांच उपयोगी पैच जिन्हें आप अपने dwm इंस्टॉलेशन में लागू कर सकते हैं। यदि आप ब्राउज़र में इसी तरह का न्यूनतम अनुभव ढूंढ रहे हैं, तो इस ट्यूटोरियल को देखें।
अक्सर पूछे जाने वाले प्रश्न
1. क्या dwm पैच उपयोग करने के लिए सुरक्षित हैं?
हां! कई मेंटेनर्स suckless वेबसाइट पर मौजूद पैच की जांच करते हैं। यह सुनिश्चित करता है कि वेबसाइट पर मौजूद सभी पैच उस dwm वर्जन के लिए काम करते हैं जिसके लिए वे लिखे गए हैं।
2. मैं git apply का उपयोग कर रहा हूं, लेकिन मेरा पैच विफल हो गया, और dwm कंपाइल नहीं हो रहा। मुझे क्या करना चाहिए?
यह कई कारणों से हो सकता है। सबसे आम कारण यह है कि git हेडर्स सोर्स फाइल में नहीं हटाए गए थे। इसे ठीक करना अपेक्षाकृत आसान है। हमें हेडर्स को हटाने और पैच को मैन्युअली खुद लागू करने की आवश्यकता है।
जब आप सोर्स फाइल खोलते हैं, तो आपको HEAD लेबल वाली एक लाइन दिखाई देगी। यह संशोधन की शुरुआत को इंगित करता है। इसके बाद वह फंक्शन आता है जिसे संशोधित करने की आवश्यकता है। आपको उस लाइन को हटाने और पैचिंग को मैन्युअली करने की आवश्यकता होगी। यहां बाईं ओर कोड पर + और - चिह्न भी होंगे जो आपको बताएंगे कि क्या बदलना है।
3. जब मैंने पैच सफलतापूर्वक लागू कर दिया, लेकिन dwm कंपाइल नहीं होना चाहता और गुम वेरिएबल्स या डिक्लेरेशन के लिए पूछ रहा है तो मुझे क्या करना चाहिए?
पैचिंग प्रोग्राम ने config.h फाइल को पैच नहीं किया। डिफ़ॉल्ट रूप से, पैच वर्तमान कॉन्फिगरेशन के साथ संघर्ष से बचने के लिए config.def.h फाइल को संपादित करेंगे।
हालांकि, इसका मतलब है कि config.h फाइल उस विशेष पैच के लिए सही कॉन्फिगरेशन मानों के साथ लोड नहीं होगी। इसे ठीक करने के लिए, आपको config.def.h फाइल में परिवर्तनों को अपनी config.h फाइल में पेश करने की आवश्यकता है।