কিভাবে সঠিকভাবে Defcustom ব্যবহার করবেন?


15

বেশিরভাগ ইমাক ব্যবহারকারীদের মতো আমি ভেরিয়েবলগুলি পরিবর্তন করে একটি মোড কাস্টমাইজ করেছি। আমার কাছে যা ঘটেনি তা হ'ল এই প্রোগ্রামিংয়ের মানসিকতা যা এই-ও -টিকে স্বনির্ধারিত করার পিছনে রয়েছে। আমি যখন এহেলের জন্য সোর্স কোডের কিছু অনুসন্ধান করা শুরু করি তখন আমি এটি উপলব্ধি করেছিলাম। আমি একজন elisp প্রোগ্রামার নই, কিন্তু বিশেষভাবে em-ls.elব্যবহার বলে মনে হয় defcustom, defgroupইত্যাদি এই বিশ্বব্যাপী সংজ্ঞায়িত ভেরিয়েবল যে elisp কোড ব্যবহার সম্পর্কে একটি ছায়া বিশ্বের হবে বলে মনে হচ্ছে হবে। সুতরাং একটি প্রশ্ন হ'ল, কী কী defcustomঅন্য উপায় (কাস্টমাইজযোগ্য) বৈশ্বিক ভেরিয়েবলের ব্যবহার?

কীভাবে আমাকে পুরো ধারণাটি সঠিকভাবে ব্যবহার করতে হবে (প্রথমে বুঝতে হবে) পিছনে defcustom, কখন ব্যবহার করতে হবে, কেন, কখন নয়? একটি এলিজপ শিক্ষানবিসের জন্য একটি সূচনা উদাহরণ হতে পারে।


আপনি যা জিজ্ঞাসা করছেন তা কি আপনি পরিষ্কার করতে পারেন? আপনি কি কখন জানতে চান যে customizeসুবিধাগুলি বনাম কখন হাত দিয়ে কাস্টমাইজ করবেন? বা আপনি একটি মোড লেখার আগ্রহী? দ্বিতীয়টি হ'ল এমন পরিস্থিতি যেখানে আপনি সম্ভবত নিজের মতো defcustomএবং পছন্দ মতো জিনিস ব্যবহার করে দেখতে পেলেন।
ড্যান

উত্তর:


20

স্বনির্ধারণ সিস্টেম একটি বিল্ট-ইন এ গিয়ে 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(মুছুন) বোতামগুলির সাথে বর্তমান স্ট্রিংয়ের মানগুলি দেখায় এবং সম্পাদনা বাক্সগুলিতে স্ট্রিংয়ের মানগুলি সম্পাদনা করার অনুমতি দেয়। আমাদের হয়ে গেলে আমরা সিদ্ধান্ত নিতে পারি যে আমাদের পরিবর্তনগুলি প্রয়োগ করা হবে, সেগুলি ফিরিয়ে নেওয়া উচিত, বা প্রয়োগ এবং ভবিষ্যতের সেশনের জন্য সেভ করতে হবে।


2
ভাল পোস্ট! কাস্টমাইজ করার (এবং defcustom) সর্বাধিক উল্লেখযোগ্য সুবিধা হ'ল এটি স্বয়ংক্রিয়ভাবে যত্ন নেয় : (1) টাইপ-চেকিং , আপনাকে একটি ভেরিয়েবলের জন্য একটি ভুল মান প্রদান থেকে বিরত রাখতে সহায়তা করে (সরবরাহকারীর লেখক যদি defcustomযুক্তিসঙ্গত প্রকার সরবরাহ করার চেষ্টা করেছিলেন তবে চেক), (২) আরম্ভ ( :initialize) এবং আপডেট ক্রিশন (ট্রিগার) ( :set)।
ড্র হয়েছে

ধন্যবাদ! আমি আপনার পরামর্শ প্রতিফলিত পোস্ট আপডেট করেছি।
ক্যামডেজ

7

Defcustom এর ব্যবহার কি বৈশ্বিক চলকগুলি (কাস্টমাইজযোগ্য) এর অন্য উপায়?

হ্যাঁ. বিশেষত যদি আপনি চান যে আপনার কোডের ব্যবহারকারীরা এমএক্স কাস্টমাইজ ইন্টারফেসের মাধ্যমে সহজেই পরিবর্তনশীল পরিবর্তন করতে সক্ষম হন ।

Defcustom আপনার ব্যবহারকারীদের জন্য দুটি গুরুত্বপূর্ণ বেনিফিট সরবরাহ করে: ডকুমেন্টেশন এবং টাইপ সুরক্ষা। ডকুমেন্টেশন ঠিক সেখানে আছে ভাল। প্রকার সুরক্ষা আপনার ভেরিয়েবলগুলি কী ধরণের বৈধ মান নিতে পারে তা নির্দিষ্ট করতে দেয়।

অবশ্যই Defvar ঠিক আছে যদি আপনি যা কিছু করেন তা নিজের জন্য কাস্টমাইজ করে থাকেন এবং আরও বৃহত্তর ব্যবহারের প্রত্যাশা করেন না। যাইহোক, কেউ কেউ বলবেন যে ডিফল্টাস্টম দিয়ে এবং তার মধ্য দিয়ে বদ্ধ থাকাই একটি ভাল অভ্যাস ul

কেউ কীভাবে আমাকে সঠিকভাবে ব্যবহার করবেন সে বিষয়ে আলোকিত করতে ইঙ্গিত করতে পারেন ...

Defcustom এর ম্যানুয়াল পেজে আরও ব্যাখ্যা আছে। ম্যানুয়ালটিতে কাস্টমাইজেশন বিষয়টিতে সম্পূর্ণ বিশদ রয়েছে।

... কখন ব্যবহার করব, কেন, কখন নয়?

আমি ব্যক্তিগতভাবে ডেভাস্টমকে বিকাশের সময় কম জটিল বলে মনে করি কারণ আমাকে ডিভাভার এবং সেটকের সাথে পুনরায় লোড সমস্যা মোকাবেলা করতে হবে না ।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.