Dwm একটি দক্ষ মিনিমালিস্ট সফটওয়্যার। মাত্র ২০০০ লাইন কোডের মাধ্যমে এর ডেভেলপাররা একটি দ্রুত এবং হালকা উইন্ডো ম্যানেজার প্রদান করতে সক্ষম हुए। কিন্তু সফটওয়্যার ডেভেলপমেন্টের এই সংযমশীল পদ্ধতির একটি মূল্য ছিল। প্রোগ্রামের আকার ছোট রাখতে কিছু ফিচার বাদ দেওয়া হয়েছিল।
তবুও, dwm-এর सोর্স কোড প্যাচ করে নতুন ফিচার যোগ করা সম্ভব, কারণ dwm হলো সোর্স-ভিত্তিক। মৌলিক কনফিগারেশনের জন্যও আমাদের config.h মডিফাই করতে হয়, যা dwm-এর সোর্স কোডের অংশ।
প্যাচ কী?
প্যাচ হলো কোডের ছোট খণ্ড যা বড় একটি কোডবেসে যোগ করা যায়। বড় সফটওয়্যার প্রজেক্টে সহযোগিতা করার সময় এটি খুব উপকারী, কারণ এটি প্রোগ্রামারদের অন্যদের পরিবর্তনগুলি দ্রুত দেখতে দেয়।
প্যাচ হতে পারে একটি বাগ ফিক্সের মতো সহজ এক-লাইন পরিবর্তন থেকে শুরু করে একাধিক ফাইলে পরিবর্তন আনার বড় ফিচার ইন্ট্রোডাকশন পর্যন্ত।
dwm-এর সোর্স কোড প্যাচ করার পদ্ধতি
সোর্স কোডে প্যাচ যোগ করার একাধিক পদ্ধতি রয়েছে। সবচেয়ে সাধারণ পদ্ধতি হলো git কমান্ড ব্যবহার করা। উদাহরণস্বরূপ, একটি git রিপোজিটরিতে প্যাচ অ্যাপ্লাই করতে:
git apply -3 path/to/the/patch.diff
applyফাংশনটি প্যাচ ফাইলের কন্টেন্টকে নির্দেশিত সোর্স ফাইলগুলিতে ইনসার্ট করার চেষ্টা করে।-3অপশনটি অসঙ্গতিগুলি ঠিক করার চেষ্টা করে এবং প্যাচিং প্রক্রিয়ায় ভুল সলভ করতে ইউজারকে সুযোগ দেয়।
অন্যদিকে, যদি আমরা ভার্সন কন্ট্রোল ছাড়া সোর্স কোড এডিট করি, তবে GNU patch প্রোগ্রাম ব্যবহার করতে পারি। সেটি ব্যবহার করে প্যাচ ইনসার্ট করতে:
patch -p1 < path/to/the/patch.diff
-p1অপশনটি নিশ্চিত করে যে প্যাচ ফাইলটি প্যাচ প্রোগ্রামের জন্য সঠিকভাবে লেবেল করা হয়েছে।
তবে dwm প্যাচ করার সময় এই প্রোগ্রামগুলো অনেক সময় ফেল করে, কারণ তারা অনুমান করে যে আমরা যে সোর্স কোড প্যাচ করছি সেটি বেসিক dwm ইনস্টলেশনের মতো।
অর্থাৎ, যত বেশি প্যাচ ইনস্টল করবেন, প্যাচিং প্রোগ্রামের জন্য নতুন প্যাচ ইনসার্ট করা ততই কঠিন হবে। এই কারণে প্যাচ ফাইল কীভাবে কাজ করে সেটি বুঝতে হবে যাতে আমরা নিজে ম্যানুয়ালি প্যাচ ইনস্টল করতে পারি।
প্যাচ ফাইল পড়ার পদ্ধতি
একটি প্যাচ ফাইলের তিনটি অংশ থাকে:
- হেডার: কোন ফাইলে কোড ইনসার্ট করতে হবে তা দেখায়
- সাবহেডার: কোন লাইন নম্বর বা ফাংশনে ইনসার্ট করতে হবে তা দেখায়
- কোডটি নিজে
উপরোক্ত আলোচনামতে বলা হয়েছে, একটি প্যাচ ফাইলে একাধিক ফাইলের জন্য একাধিক কোড স্নিপেট থাকতে পারে। এই ফরম্যাটের কারণে প্রতিটি সোর্স ফাইলের জন্য আলাদা প্যাচ ফাইল না করে একটি ফাইল বিতরণ করা যায়।
প্যাচ ফাইল পড়তে শুধু এর হেডারের সিনট্যাক্স বুঝলেই চলে। একবার সেটি জানলে, আসলে প্যাচিং শুধু কপি-পেস্ট করার ব্যাপার।
প্যাচ হেডারের সিনট্যাক্স
প্যাচের হেডার সোর্স ফাইলের লোকেশন নিয়ে জরুরি তথ্য ধারণ করে। উদাহরণস্বরূপ, dwm autoresize প্যাচের হেডার:
diff --git a/dwm.c b/dwm.c index 0362114..e4e8514 100644 --- a/dwm.c +++ b/dwm.c
প্রথম, তৃতীয় এবং চতুর্থ লাইনটি নির্দেশ করে যে এটি dwm.c ফাইলের দুটি ভার্সনের মধ্যে একটি ডিফ। এটা বলে দেয় যে আমরা যে ফাইল মডিফাই করব সেটি "dwm.c"।
কিন্তু শুধু কী এডিট করতে হবে জানা প্যাচিং-এ সাহায্য করে না। ফাইলের কোথায় কোড ইনসার্ট করতে হবে সেটি জানতে প্যাচ ফাইলের সাবহেডার ব্যবহার করতে হয়।
উদাহরণস্বরূপ, উপরের autoresize প্যাচের একটি অংশ:
@@ -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;
এটি ডরাবণ মনে হতে পারে, কিন্তু এখানে শুধু তিনটি জিনিস দেখতে হবে:
- প্রথম লাইনটি ইন্ডিকেট করে যে কোন লাইন নম্বরে কোড স্নিপেট ইনসার্ট করতে হবে। এই উদাহরণে লাইন ৯২।
- প্রথম লাইনের দ্বিতীয় আর্গুমেন্ট
struct Client {নির্দেশ করে যে কোন ফাংশন এডিট করতে হবে। এটি খুব কাজে লাগে যখন সোর্স ফাইলটি ইতিমধ্যে ভारी প্যাচ করা থাকা কারণে বাম পাশের লাইন নম্বর মিলে না। - কোড ব্লকে
+এবং-চিহ্নগুলো। মাইনাস চিহ্ন বোঝায় যে সেটি রিমুভ করতে হবে, প্লাস চিহ্ন বোঝায় সেটি যোগ করতে হবে।
এখন আমাদের সোর্স ফাইল প্যাচ করার বেসিক ধারণা হলো। এখন dwm-এর জন্য ৫টি উপকারী প্যাচ নিয়ে আলোচনা করি।
১. সিস্ট্রে (Systray)
অधিকাংশ ডেস্কটপ এনভায়রনমেন্টের বিপরীতে, dwm ডিফল্টভাবে সিস্টেম ট্রে নিয়ে আসে না। সিস্টেম ট্রে হলো ডেস্কটপের একটি অংশ যেখানে কিছু অ্যাপ্লিকেশন একটি আইকন রাখে যাতে ব্যাকগ্রাউন্ডে চল रहे প্রোগ্রামের সাথে দ্রুত ইন্টারঅ্যাক্ট করা যায়।
এই প্যাচটি dwm-এ সেটি ফিচার যোগ করে। ইনস্টল হলে, সিস্ট্রে প্যাচ dwm বার-এর ডানদিকের কোণে বর্তমান সিস্ট্রে প্রোগ্রামের জন্য জায়গা আলোকেট করে। এছাড়া এটি মাল্টি-মনিটর সেটআপ সাপোর্ট করে যেখানে ট্রে সবসময় ওই মনিটরে দেখাবে যেখানে মাউস পয়েন্টার রয়েছে।
২. Xresources
Xresources প্যাচ xrdb প্রোগ্রামকে dwm-এর গ্রাফিক্যাল সেটিংস সেট করতে সক্ষম করে। এটি আমাদের .Xresources ফাইল ব্যবহার করে রং এবং ফন্ট পরিবর্তন করতে দেয় রিকম্পাইল ছাড়াই। এটি তাদের জন্য বিশেষ উপকারী যারা টার্মিনাল কালার স্কিমের জন্য একই ফাইল ব্যবহার করেন।
আরও, xrdb dwm-এর চেহারা নিয়ন্ত্রণ করলে একাধিক থিম ব্যবহার করা যায়। আমরা .Xresources ফাইলটি কালার স্কিম অনুযায়ী মডিফাই করে এবং dwm রিলোড করে থিম পরিবর্তন করতে পারি।
৩. টাটামি (Tatami)
টাটামি dwm-এর একটি বিকল্প উইন্ডো লেআউট। এটি স্ক্রিনের উইন্ডোগুলোকে ট্রেডিশনাল জাপানিজ ফ্লোরিং-এর মতো টাইল আকারে সাজায়। এই পদ্ধতি ট্রেডিশনাল মাস্টার-স্ট্যাক লেআউট থেকে আলাদা, যেখানে মাস্টার ছাড়া প্রতিটি উইন্ডো বーティক্যালি সঙ্কীর্ণ হয়ে যায়, ফলে স্ট্যাকের প্রতিটি উইন্ডো পড়তে অযোগ্য হয়ে যায়।
টাটামি লেআউট চার থেকে পাঁচটি উইন্ডো একসাথে হ্যান্ডেল করার সময় বিশেষভাবে উপকারী, কারণ এটি প্রতিটি উইন্ডোর জন্য পর্যাপ্ত স্ক্রিন স্পেস দেয় পড়ার জন্য।
৪. ফোকাস মাস্টার (Focus Master)
dwm উইন্ডো সাজায় স্টকে ব্লক রাখার মতো। প্রতিটি নতুন উইন্ডো পূর্বের উইন্ডোর উপরে বসানো হয়। এটি উইন্ডোগুলোর মধ্যে একটি লিনিয়ার অর্ডার তৈরি করে এবং আমাদের জানতে দেয় কোন উইন্ডো প্রথমে তৈরি হয়েছিল।
তবে এই ডিজাইনের একটি লিমিটেশন হলো এটি আমাদের স্ট্যাক থেকে মাস্টার উইন্ডো বাচনোর স্বাধীনতা দেয় না। মাস্টার সিলেক্ট করতে হলে প্রতিটি উইন্ডো সিলেক্ট করে হাইएস্ট ব্লক পর্যন্ত যেতে হয়। এই প্যাচটি এই আচরণ পরিবর্তন করে এবং স্ট্যাকে যেকোনো জায়গা থেকে বর্তমান মাস্টার উইন্ডো সিলেক্ট করতে দেয়।
এটি একাধিক উইন্ডো ডিল করার সময় খুব উপকারী, কারণ এটি উইন্ডো স্ট্যাকে মাস্টারকে অটোমেটিক্যালি সিলেক্ট করতে দেয় প্রতিটি উইন্ডোতে সাইকেল করার বদলে।
৫. dwmc
dwm-এর যেকোনো দিক মডিফাই করলে প্রোগ্রাম রিকম্পাইল করতে হয় পরিবর্তন অ্যাপ্লাই করার জন্য। এতে কালার স্কিম এবং ডিফল্ট আচরণ সহ অন্যান্য বিষয় রয়েছে।
dwmc হলো একটি সহজ প্যাচ যা একটি ক্লায়েন্ট প্রোগ্রামের মাধ্যমে dwm-এর আচরণ পরিবর্তন করতে দেয়। এই পদ্ধতি bspwm-এর bspc-এর মতো। যদিও dwmc bspc-র চেয়ে সহজ, তবুও এর কিছু উপকারী সেটিং আছে যা ব্যবহার ও মডিফাই করা যায়।
উদাহরণস্বরূপ, dwmc-এ একটি ফাংশন হলো togglebar। dwmc togglebar রান করলে dwm বার ডাইনামিক্যালি ইনেবল/ডিজেবল করা যায়। এটি কাস্টম উইন্ডো আচরণের স্ক্রিপ্ট বানাতে উপকারী।
অভিনন্দন! এখন আপনার কোড প্যাচিং কীভাবে কাজ করে সেটির বেসিক ধারণা পেয়েছেন এবং আপনার dwm ইনস্টলেশনে প্রয়োগ করার জন্য ৫টি উপকারী প্যাচও জানেন। অনুরূপ মিনিমাল অভিজ্ঞতা ব্রাউজারে চাইলে এই টিউটোরিয়াল দেখুন।
প্রশ্নোত্তর
১. dwm প্যাচগুলো ব্যবহার করার নিরাপদ?
হ্যাঁ! সকললেস ওয়েবসাইটে উপস্থিত প্যাচগুলো অনেক মেইনটেইনার চেক করেন। এটি নিশ্চিত করে যে সকল প্যাচ তার লিখা dwm ভার্সনের জন্য কাজ করে।
২. আমি git apply ব্যবহার করছি, কিন্তু প্যাচ ফেল করেছে এবং dwm কম্পাইল হচ্ছে না। কী করব?
এটি অনেক কারণে হতে পারে। সবচেয়ে সাধারণ কারণ হলো git হেডারগুলো সোর্স ফাইলে থেকে রিমুভ করা হয়নি। এটি সহজেই ফিক্স করা যায়। হেডারগুলো রিমুভ করে নিজে ম্যানুয়ালি প্যাচ অ্যাপ্লাই করতে হবে।
সোর্স ফাইল খুললে HEAD লেবেলযুক্ত একটি লাইন দেখবেন। এটি মডিফিকেশনের শুরু ইন্ডিকেট করে। এর পরে যে ফাংশন মডিফাই করতে হবে সেটি থাকে। সেই লাইনটি রিমুভ করে ম্যানুয়ালি প্যাচ করতে হবে। এখানেও কোডের বাম পাশে + এবং - চিহ্ন থাকবে যা গাইড করবে কী পরিবর্তন করতে হবে।
৩. প্যাচ সফলভাবে অ্যাপ্লাই হলো, কিন্তু dwm কম্পাইল করতে চায় না এবং মিসিং ভেরিয়েবল বা ডিক্লেরেশনের জন্য এরর দিচ্ছে। কী করব?
প্যাচিং প্রোগ্রাম config.h ফাইল প্যাচ করেনি। ডিফল্টভাবে প্যাচগুলো config.def.h ফাইল এডিট করে বর্তমান কনফিগারেশনের সাথে конфлиগ্ট এড়াতে।
তবে এর মানে config.h ফাইলটি সেটি প্যাচের জন্য সঠিক কনফিগারেশন ভ্যালুদের সাথে লোড হবে না। এটা ফিক্স করতে config.def.h ফাইলের পরিবর্তনগুলো আপনার config.h ফাইলে যোগ করতে হবে।