Dwm হল মিনিমালিস্ট সফটওয়্যারের একটি উজ্জ্বল অংশ। কোডের মাত্র 2000 লাইনের মাধ্যমে, এর বিকাশকারীরা একটি দ্রুত এবং হালকা উইন্ডো ম্যানেজার প্রদান করতে সক্ষম হয়েছে। সফ্টওয়্যার বিকাশের এই স্পার্টান পদ্ধতির একটি মূল্য ছিল। প্রোগ্রামের আকার কম রাখার জন্য কিছু বৈশিষ্ট্য বাদ দেওয়া হয়েছে।
তা সত্ত্বেও, dwm এর সোর্স কোড প্যাচ করে নতুন বৈশিষ্ট্যগুলি প্রবর্তন করা সম্ভব, কারণ dwm উৎস-ভিত্তিক। শুধুমাত্র মৌলিক কনফিগারেশন করার জন্য, আমাদের config.h পরিবর্তন করতে হবে, যা dwm এর সোর্স কোডের একটি অংশ।
যদিও এটি প্রথমে জটিল মনে হতে পারে, আমরা প্রক্রিয়া সম্পর্কে কিছু জিনিস বুঝতে পারলে dwm প্যাচ করা সহজ। এই নিবন্ধটির লক্ষ্য আপনার নিজের dwm ইনস্টলেশনকে সফলভাবে প্যাচ করার জন্য প্রয়োজনীয় দক্ষতার সেট শেখানো এবং পাঁচটি দরকারী প্যাচ প্রদান করা।
প্যাচগুলি কী?
৷প্যাচগুলি কোডের ছোট টুকরো যা কাজের একটি বড় অংশে ঢোকানো যেতে পারে। একটি বড় সফ্টওয়্যার প্রকল্পে সহযোগিতা করার সময় এটি দরকারী, কারণ এটি প্রোগ্রামারদের অন্যদের দ্বারা করা পরিবর্তনগুলি দ্রুত দেখতে দেয়৷
প্যাচগুলি একটি বাগ সংশোধন করতে একটি ছোট ওয়ান-লাইনার পরিবর্তনের মতো সহজ হতে পারে বা একটি বিশাল মাল্টি-ফাইল পরিবর্তন যা একটি নতুন বৈশিষ্ট্য প্রবর্তন করে৷
dwm-এর জন্য সোর্স কোড কীভাবে প্যাচ করবেন
সোর্স কোডে প্যাচ প্রবর্তনের একাধিক উপায় রয়েছে। এটি করার সবচেয়ে সাধারণ উপায় হল একটি গিট কমান্ডের মাধ্যমে। উদাহরণস্বরূপ, একটি গিট সংগ্রহস্থলে একটি প্যাচ প্রবর্তন করতে, নিম্নলিখিতটি টাইপ করুন:
git apply -3 path/to/the/patch.diff
-
apply
ফাংশন নির্দেশিত উৎস ফাইলগুলিতে প্যাচ ফাইলগুলির বিষয়বস্তু সন্নিবেশ করার চেষ্টা করবে৷ -
-3
বিকল্পটি যেকোনো অসঙ্গতি ঠিক করার চেষ্টা করবে এবং ব্যবহারকারীকে প্যাচিং প্রক্রিয়ার কোনো ভুল ঠিক করার অনুমতি দেবে।
অন্যদিকে, আমরা যদি কোনো সংস্করণ নিয়ন্ত্রণ ছাড়াই সোর্স কোড সম্পাদনা করি, আমরা GNU প্যাচ প্রোগ্রাম ব্যবহার করতে পারি। এটি ব্যবহার করে একটি প্যাচ সন্নিবেশ করতে, নিম্নলিখিত টাইপ করুন:
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" ফাইল৷
যাইহোক, শুধুমাত্র কী সম্পাদনা করতে হবে তা জানা আমাদের সোর্স ফাইল প্যাচ করতে সাহায্য করবে না। আমাদের এখনও জানা দরকার যে ফাইলটিতে আমাদের কোডটি প্রবেশ করাতে হবে। এখানেই আমরা প্যাচ ফাইলের উপশিরোনাম ব্যবহার করতে পারি।
উদাহরণস্বরূপ, এটি উপরে বর্ণিত একই অটোরাইজ প্যাচের একটি সেগমেন্ট:
@@ -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. সিস্ট্রে
বেশিরভাগ ডেস্কটপ পরিবেশের বিপরীতে, dwm ডিফল্টরূপে সিস্টেম ট্রে সহ আসে না। সিস্টেম ট্রে হল একটি ডেস্কটপের একটি সেগমেন্ট যেখানে কিছু অ্যাপ্লিকেশন ব্যাকগ্রাউন্ডে চলমান একটি প্রোগ্রামের সাথে দ্রুত ইন্টারঅ্যাক্ট করতে অ্যাপের ফাংশন সহ একটি আইকন রেখে যেতে পারে।
এই প্যাচটি dwm-এ সেই বৈশিষ্ট্যটি প্রবর্তন করে। একবার ইনস্টল হয়ে গেলে, সিস্ট্রে প্যাচ বর্তমান সিস্টেম ট্রে প্রোগ্রামগুলিতে dwm বারের ডানদিকের কোণে বরাদ্দ করবে। এটি মাল্টি-মনিটর সেটআপগুলিকেও সমর্থন করে যেখানে ট্রেটি সর্বদা সেই মনিটরে প্রদর্শিত হবে যেখানে বর্তমানে মাউস পয়েন্টার রয়েছে৷
2. Xresources
Xresources প্যাচ xrdb প্রোগ্রামটিকে dwm-এর জন্য গ্রাফিকাল সেটিংস সেট করতে সক্ষম করে। এটি আমাদের প্রোগ্রাম পুনরায় কম্পাইল না করে রঙ এবং ফন্ট পরিবর্তন করতে .Xresources ফাইল ব্যবহার করার অনুমতি দেয়। এটি বিশেষত ব্যবহারকারীদের জন্য উপযোগী যারা ইতিমধ্যেই তাদের টার্মিনাল কালার স্কিমের জন্য একই ফাইল ব্যবহার করে৷
আরও, xrdb dwm-এর উপস্থিতি নির্দেশ করে তা আমাদের একাধিক থিম ব্যবহার করার অনুমতি দেয়। আমরা যে রঙের স্কিমের জন্য .Xresources ফাইলটি পরিবর্তন করতে চাই এবং dwm পুনরায় লোড করে এটি সক্রিয় করে তা করতে পারি৷
3. তাতামি
Tatami হল dwm-এর জন্য একটি বিকল্প উইন্ডো লেআউট। এটি পর্দার জানালাগুলিকে টাইলস হিসাবে উপস্থাপন করে যা একটি ঐতিহ্যবাহী জাপানি মেঝেতে সাজানো হয়। এই পদ্ধতিটি প্রথাগত মাস্টার এবং স্ট্যাক লেআউটের থেকে আলাদা, যেখানে মাস্টার ছাড়া অন্য প্রতিটি উইন্ডো উল্লম্বভাবে পাতলা হয়ে যায়, তাই স্ট্যাকের প্রতিটি উইন্ডো অপঠনযোগ্য করে তোলে।
এক সাথে চার থেকে পাঁচটি উইন্ডোর সাথে কাজ করার সময় তাতামি লেআউটটি বিশেষভাবে উপযোগী, কারণ এটি প্রতিটি উইন্ডোকে আমাদের পড়ার জন্য ব্যবহারকারীর জন্য যথেষ্ট স্ক্রীন স্পেস দেয়।
4. ফোকাস মাস্টার
ডিডব্লিউএম যেভাবে উইন্ডোগুলি সাজায় তা একটি স্ট্যাকের মধ্যে ব্লক স্থাপনের অনুরূপ। প্রতিটি নতুন তৈরি উইন্ডো পূর্ববর্তী উইন্ডোর উপরে স্থাপন করা হয়। এটি উইন্ডোগুলির মধ্যে একটি রৈখিক ক্রম তৈরি করে এবং আমাদের জানার অনুমতি দেয় কোন উইন্ডোটি প্রথমে এসেছে৷
যাইহোক, এই ডিজাইনের একটি সীমাবদ্ধতা হল এটি আমাদের স্ট্যাক থেকে অবাধে মাস্টার উইন্ডো নির্বাচন করার অনুমতি দেয় না। মাস্টার নির্বাচন করার জন্য, আমরা সর্বোচ্চ ব্লকে না পৌঁছা পর্যন্ত প্রতিটি উইন্ডো নির্বাচন করতে হবে। এই প্যাচটি এই আচরণকে পরিবর্তন করে এবং স্ট্যাকের যেকোনো স্থান থেকে আমাদের বর্তমান মাস্টার উইন্ডো নির্বাচন করতে দেয়।
একাধিক উইন্ডোর সাথে কাজ করার সময় এটি বিশেষভাবে কার্যকর, কারণ এটি আমাদের উপস্থিত প্রতিটি উইন্ডোতে সাইকেল চালানোর পরিবর্তে উইন্ডো স্ট্যাকের মধ্যে মাস্টারটি স্বয়ংক্রিয়ভাবে নির্বাচন করতে দেয়৷
5. dwmc
dwm-এর যেকোন দিক পরিবর্তন করার জন্য যখনই আমরা আমাদের পরিবর্তনগুলি প্রয়োগ করতে চাই তখন আমাদের প্রোগ্রামটি পুনরায় কম্পাইল করতে হবে। এর মধ্যে রয়েছে, অন্যদের মধ্যে, রঙের স্কিম এবং ডিফল্ট আচরণ।
dwmc একটি সাধারণ প্যাচ যা আমাদের একটি ক্লায়েন্ট প্রোগ্রামের মাধ্যমে dwm এর আচরণ পরিবর্তন করতে দেয়। এই পদ্ধতিটি bspwm-এর সেটিংস পরিবর্তন করতে bspc ব্যবহার করার মতো। যদিও dwmc bspc এর থেকে অনেক সহজ, তবুও এটিতে অনেকগুলি দরকারী সেটিংস রয়েছে যা আমরা ব্যবহার এবং পরিবর্তন করতে পারি৷
উদাহরণস্বরূপ, একটি ফাংশন যা আমরা dwmc-এ ব্যবহার করতে পারি তা হল টগলবার। dwmc টগলবার চালানোর ফলে আমরা dwm বারকে গতিশীলভাবে সক্রিয় এবং নিষ্ক্রিয় করতে পারি। কাস্টম উইন্ডো আচরণ সম্পাদন করে এমন স্ক্রিপ্ট তৈরি করার সময় এটি dwmc কে উপযোগী করে তোলে।
অভিনন্দন! কোড প্যাচিং কিভাবে কাজ করে সেই সাথে আপনার dwm ইন্সটলেশনে আপনি যে পাঁচটি দরকারী প্যাচ প্রয়োগ করেন সে সম্পর্কে আপনার এখন প্রাথমিক ধারণা রয়েছে। আপনি যদি ব্রাউজারে অনুরূপ ন্যূনতম অভিজ্ঞতা খুঁজছেন, এই টিউটোরিয়ালটি দেখুন৷
৷প্রায়শই জিজ্ঞাসিত প্রশ্ন
1. dwm প্যাচ ব্যবহার করা নিরাপদ?
হ্যাঁ! অনেক রক্ষণাবেক্ষণকারী স্তন্যহীন ওয়েবসাইটে উপস্থিত প্যাচগুলি পরীক্ষা করে। এটি নিশ্চিত করে যে ওয়েবসাইটের সমস্ত প্যাচ dwm-এর যে সংস্করণের জন্য এটি লেখা হয়েছে তার জন্য কাজ করে৷
2. আমি গিট প্রয়োগ ব্যবহার করছি, কিন্তু আমার প্যাচ ব্যর্থ হয়েছে, এবং dwm কম্পাইল হচ্ছে না। আমার কি করা উচিত?
এটি বিভিন্ন কারণে ঘটতে পারে। সবচেয়ে সাধারণ কারণ হল সোর্স ফাইলে গিট হেডারগুলি সরানো হয়নি। এটি ঠিক করা তুলনামূলকভাবে সহজ। আমাদের শিরোনামগুলি সরাতে হবে এবং প্যাচটি নিজেরাই প্রয়োগ করতে হবে৷
আপনি যখন সোর্স ফাইল খুলবেন, আপনি HEAD
লেবেলযুক্ত একটি লাইন দেখতে পাবেন . এটি পরিবর্তনের শুরু নির্দেশ করে। এটি পরিবর্তন করা প্রয়োজন যে ফাংশন দ্বারা অনুসরণ করা হয়. আপনাকে সেই লাইনটি সরাতে হবে এবং ম্যানুয়ালি প্যাচিং করতে হবে। এখানে, +
ও থাকবে এবং -
কোডের বাম দিকের চিহ্নগুলি আপনাকে কী পরিবর্তন করতে হবে সে সম্পর্কে গাইড করতে৷
3. আমি যখন সফলভাবে একটি প্যাচ প্রয়োগ করি তখন আমি কী করব, কিন্তু dwm কম্পাইল করতে চায় না এবং অনুপস্থিত ভেরিয়েবল বা ঘোষণার জন্য জিজ্ঞাসা করছে?
প্যাচিং প্রোগ্রামটি config.h ফাইলটি প্যাচ করেনি। ডিফল্টরূপে, বর্তমান কনফিগারেশনের সাথে কোনো দ্বন্দ্ব এড়াতে প্যাচগুলি config.def.h ফাইলটি সম্পাদনা করবে৷
যাইহোক, এর অর্থ হল config.h ফাইলটি সেই নির্দিষ্ট প্যাচের জন্য সঠিক কনফিগারেশন মান সহ লোড হবে না। এটি ঠিক করতে, আপনাকে আপনার config.h ফাইলে config.def.h ফাইলের পরিবর্তনগুলি প্রবর্তন করতে হবে৷