tl; dr: ব্যবহার করুন if
এবং আপনার নিজস্ব init ফাংশন:
(if (fboundp 'prog-mode)
(define-derived-mode your-cool-mode prog-mode "Cool"
"Docstring"
(your-cool--init))
(define-derived-mode your-cool-mode nil "Cool"
"Docstring"
(your-cool--init)))
তারপরে সমস্ত মোডের সূচনাটি ইন-ইন করুন your-cool-init
।
দীর্ঘতর ব্যাখ্যা:
সমস্যাটি হ'ল একটি উত্পন্ন প্রধান মোডে লেখার আনুষ্ঠানিক উপায় হ'ল define-derived-mode
ম্যাক্রো ব্যবহার করা :
(define-derived-mode your-cool-mode prog-mode ...)
পুরানো ইমাসসেনে (প্রাক-24), যখন এটি ভেঙে যায় prog-mode
। এবং আপনি (if (fboundp 'prog-mode) ...)
সেখানে ব্যবহার করতে পারবেন না কারণ ম্যাক্রো একটি আক্ষরিক প্রতীক প্রত্যাশা করে, এবং এটি আপনার প্রসারণে উদ্ধৃত করবে।
define-derived-mode
পিতামাতাকে বিভিন্ন উপায়ে ব্যবহার করে। এগুলি ব্যবহারের জন্য আপনার নিজের মোড সংজ্ঞায়িত সমস্তকে অনুলিপি করা দরকার এবং এটি ক্লান্তিকর এবং ত্রুটি-প্রবণ উভয়ই।
সুতরাং একমাত্র উপায় হ'ল দু'টি পৃথক define-derived-mode
বিবৃতি ব্যবহার করা , prog-mode
বিদ্যমান বা না থাকা নির্ভর করে । এটি আপনাকে আপনার আরম্ভের কোডটি দুবার লেখার সমস্যায় ফেলে দেয়। যা অবশ্যই খারাপ, সুতরাং আপনি এটি তার নিজস্ব ফাংশন থেকে উত্তোলন করুন, উপরে বর্ণিত হিসাবে।
(সবচেয়ে ভাল সমাধান অবশ্যই 23.x এর জন্য সমর্থন বাদ দেওয়া এবং লেজিকাল স্কোপিং ব্যবহার করা। তবে আমার ধারণা আপনি ইতিমধ্যে সেই বিকল্পটি বিবেচনা করেছেন এবং ফেলে দিয়েছেন dropped :-))
prog-mode
। উল্লেখযোগ্যভাবে, আপনি লেক্সিকাল বাইন্ডিংয়ের অভাব থেকে ভুগবেন।