স্বনির্ধারণ সিস্টেম একটি বিল্ট-ইন এ গিয়ে Emacs বৈশিষ্ট্য অবিকল সমস্যা সমাধানের জন্য ডিজাইন বর্ণনা প্রোগ্রামিং গড় ব্যবহারকারী তাদের সম্পাদক কনফিগার করতে জন্য আদর্শ উপায় হতে না পারে।
কাস্টমাইজেশন কার্যকারিতার প্রাথমিক প্রবেশ বিন্দুটি M-x customize RET(বা Options > Customize Emacs > Top-level Customization Groupমেনু থেকে)। সেখান থেকে আপনি সেটিংস সামঞ্জস্য করার জন্য একটি ইন্টারেক্টিভ মেনু সিস্টেম দেখতে পাবেন। এই ইন্টারফেসটি প্রয়োগ করে যে সমস্ত সেটিংস সঠিক ধরণের (সংখ্যা, স্ট্রিং, রঙ ইত্যাদি), ব্যবহারকারীরা ইম্যাকসকে প্রোগ্রামালিমে কনফিগার করার সময় ত্রুটির একটি বড় উত্স এড়িয়ে চলে। ব্যবহারকারী যদি ইউআইয়ের মাধ্যমে তারা যে কোনও পরিবর্তন চালিয়ে যেতে চান, তবে সেটিংসটি ব্যবহারকারীর প্রারম্ভিককরণের ফাইলের একটি বিশেষ বিভাগে সংরক্ষণ করা হয় (পড়ুন .emacs:)।
defcustomনিম্ন স্তরের ইমাস লিস্প কার্যকারিতা চারপাশে মোড়ক দেওয়া defvarউভয়ই চলক ঘোষণা করে এবং এটি কাস্টমাইজেশন ইন্টারফেসের মধ্যে দৃশ্যমান করে তোলে। এটি বিকাশকারীকে একটি উপযুক্ত ইন্টারেক্টিভ নিয়ন্ত্রণ প্রদর্শন করার জন্য প্রয়োজনীয় অতিরিক্ত মেটাডেটা সরবরাহ করার অনুমতি দেয় — অর্থাৎ এই পরিবর্তনশীলটিতে কোন ধরণের মান সংরক্ষণ করা হয়? একটি নির্বিচারে স্ট্রিং? একটি সংখ্যা? বিকল্পগুলির একটি নির্দিষ্ট সেট থেকে পছন্দ? ইত্যাদি defgroupহ'ল এই কাস্টমাইজযোগ্য বিকল্পগুলির জন্য একটি গ্রুপিং কনস্ট্রাক্ট যাতে তারা একটি সুন্দর শ্রেণিবিন্যাসে সাজানো যায়।
এই কার্যকারিতাটি যে কোনও সময় ব্যবহার করা উচিত যখন কোনও গ্রন্থাগারের অভ্যন্তরীণ বিবরণ না করে কোনও টুকরো উপাত্ত ব্যবহারকারীর জন্য কনফিগারযোগ্য বিকল্প হিসাবে বিবেচনা করা উচিত।
আমার একটি ছোট লাইব্রেরি থেকে আঁকানো একটি সাধারণ উদাহরণ এখানে:
(defgroup checkbox nil
"Quick manipulation of textual checkboxes."
:group 'convenience)
(defcustom checkbox-states '("[ ]" "[x]")
"Checkbox states to cycle between.
First item will be the state for new checkboxes."
:group 'checkbox
:type '(repeat string))
defgroupটপ লেভেল অধীনে কাস্টমাইজেশন ইন্টারফেস মধ্যে একটি নতুন গ্রুপ তৈরি করে convenienceআইটেম। আমার তখন সম্ভাব্য চেকবক্সের রাজ্যগুলি সংরক্ষণ করার জন্য একটি পরিবর্তনশীল প্রয়োজন। আমি ব্যবহার করতে পারতাম defvar, তবে যেহেতু আমি এটি সহজে কাস্টমাইজযোগ্য হতে চাই, তাই আমি ব্যবহার করতে বেছে নিয়েছি defcustom। :groupঅংশ নির্দেশ করে যে এটি ইতোমধ্যে সংজ্ঞায়িত গোষ্ঠীর আওতাধীন এবং :typeইঙ্গিত করে যে এটা স্ট্রিং একটি ক্রম। এখানে একটি ডিফল্ট মান এবং একটি বিবরণও রয়েছে। ব্যবহারকারীর দ্বারা প্রবেশ করা মানগুলি রূপান্তর করার জন্য অতিরিক্ত সুবিধা (এখানে দেখানো হয়নি) রয়েছে।
আমি যদি এখন চালাচ্ছি M-x customize RETএবং নেভিগেট করি তবে আমি Convenience > Checkboxনিম্নলিখিতটি দেখছি:

এটি বিশ্বের সবচেয়ে সুন্দর ইন্টারফেস নয়, তবে লক্ষ্য করুন যে এটিতে "চেকবক্স স্টেটস" ( checkbox-statesঅভ্যন্তরীণ) এর মান কাস্টমাইজ করার জন্য ইন্টারেক্টিভ সরঞ্জাম রয়েছে । এটি INS(সন্নিবেশ) এবং DEL(মুছুন) বোতামগুলির সাথে বর্তমান স্ট্রিংয়ের মানগুলি দেখায় এবং সম্পাদনা বাক্সগুলিতে স্ট্রিংয়ের মানগুলি সম্পাদনা করার অনুমতি দেয়। আমাদের হয়ে গেলে আমরা সিদ্ধান্ত নিতে পারি যে আমাদের পরিবর্তনগুলি প্রয়োগ করা হবে, সেগুলি ফিরিয়ে নেওয়া উচিত, বা প্রয়োগ এবং ভবিষ্যতের সেশনের জন্য সেভ করতে হবে।
customizeসুবিধাগুলি বনাম কখন হাত দিয়ে কাস্টমাইজ করবেন? বা আপনি একটি মোড লেখার আগ্রহী? দ্বিতীয়টি হ'ল এমন পরিস্থিতি যেখানে আপনি সম্ভবত নিজের মতোdefcustomএবং পছন্দ মতো জিনিস ব্যবহার করে দেখতে পেলেন।