আপনি কিভাবে ইমাসে সক্রিয় ছোটখাটো মোডগুলি তালিকাভুক্ত করবেন?
আপনি কিভাবে ইমাসে সক্রিয় ছোটখাটো মোডগুলি তালিকাভুক্ত করবেন?
উত্তর:
সমস্ত গৌণ মোড কমান্ডের একটি তালিকা ভেরিয়েবলে সংরক্ষণ করা হয় minor-mode-list। তারা সক্রিয় রয়েছে কি না তা সন্ধান করে সাধারণত একই নামের ভেরিয়েবল পরীক্ষা করে। সুতরাং আপনি এর মতো কিছু করতে পারেন:
(defun which-active-modes ()
"Give a message of which minor modes are enabled in the current buffer."
(interactive)
(let ((active-modes))
(mapc (lambda (mode) (condition-case nil
(if (and (symbolp mode) (symbol-value mode))
(add-to-list 'active-modes mode))
(error nil) ))
minor-mode-list)
(message "Active modes are %s" active-modes)))
দ্রষ্টব্য: এটি কেবলমাত্র বর্তমান বাফারের জন্য কাজ করে (কারণ ছোটখাটো মোডগুলি কেবলমাত্র নির্দিষ্ট বাফারে সক্ষম হতে পারে)।
boundpপরিবর্তে symbolpআপনি ব্যবহার করে মুক্তি থেকে মুক্তি পেতে পারেন condition-case।
describe-modeকোনওভাবে সক্ষম ছোটখাট মোডগুলির একটি তালিকা নিয়ে আসতে পারে, কেন আমি পারি না? সুতরাং তার সোর্স কোড পড়ার পর আমি বুঝতে পারি যে এটি উভয় থেকে সক্রিয় ছোটখাট মোড তালিকা পায় minor-mode-listএবং minor-mode-alist। তৃতীয় পক্ষের dash.elতালিকা ম্যানিপুলেশন লাইব্রেরি ব্যবহার করে আমি এই কোডটি নিয়ে এসেছি:
(--filter (and (boundp it) (symbol-value it)) minor-mode-list)
সুতরাং, উদাহরণস্বরূপ, সমস্ত ছোটখাটো মোড অক্ষম করতে, ব্যবহার করুন -each:
(--each (--filter (and (boundp it) (symbol-value it)) minor-mode-list)
(funcall it -1))
কোনও ভেরিয়েবলে ছোট ছোট মোডের তালিকাটি সংরক্ষণ করতে ভুলবেন না, অন্যথায় আপনাকে ইমাকগুলি পুনরায় চালু করতে হবে বা মেমরির দ্বারা এগুলি সক্ষম করতে হবে।
আপনি যদি নির্দিষ্টভাবে মোডে সক্রিয় সমস্ত বাফারগুলির সাথে প্রোগ্রামগতভাবে কিছু করতে চান তবে সর্বোত্তম, সর্বাধিক সংক্ষিপ্ত, পরিচ্ছন্ন, অন্তর্নির্মিত সমাধানটি নিম্নরূপ:
(dolist ($buf (buffer-list (current-buffer)))
(with-current-buffer $buf
(when some-buffer-local-minor-or-major-mode-variable-you-want-to-find
(message "x %s" $buf))))
এটি নিম্নলিখিতগুলি করে:
buffer-listবর্তমানে সক্রিয় বাফারের মাধ্যমে সমস্ত বাফারের একটি তালিকা পুনরুদ্ধার করুন (সুতরাং এটি প্রথমে চিকিত্সা করা হয়, সাধারণত আপনি যা চান তবে current-bufferপ্যারামিটারটি যদি যত্ন না করেন তবে তা ছেড়ে দিন )।$buf।with-current-buffer $bufইমাক্সকে বলার জন্য ব্যবহার করুন যে শরীরের সমস্ত কোডগুলি এমনভাবে চালানো উচিত $bufযা আপনি স্ক্রিনে প্রদর্শিত হচ্ছেন না কেন বাফারের পরিবর্তে এটি বাফারের ভিতরে চলছে ।when <some mode variable>কোনও মোড সক্ষম আছে কিনা তা যাচাই করার সঠিক উপায়; আপনি ifএবং অন্যান্য অন্যান্য পদ্ধতি ব্যবহার করতে পারেন । যে কোনও উপায়ে, লক্ষ্যটি বাফারে কোনও মাইনর বা মেজর-মোডের প্রধান মোড ভেরিয়েবল সেট করা আছে কিনা তা পরীক্ষা করা। প্রায় সমস্ত মোড একটি মোডকে "সংজ্ঞায়িত" করার মাধ্যমে একটি ভেরিয়েবলকে সংজ্ঞায়িত করে, যা তাদের স্বয়ংক্রিয়ভাবে মোডের নাম অনুসারে একটি বাফার-লোকাল ভেরিয়েবল তৈরি করে, যার ফলে এটি কীভাবে কাজ করে। এবং যদি তাদের কাছে মানক ভেরিয়েবল না থাকে তবে তাদের "টগল" কোড কীভাবে তাদের চালু এবং বন্ধ করতে হবে তা কীভাবে নির্ধারণ করে তা দেখতে তাদের নিজস্ব উত্স কোডটি দেখুন। তাদের মধ্যে 99% তাদের মোডেনামের পরিবর্তনশীলটির অস্তিত্ব ব্যবহার করে (এবং যদি তা না করে তবে আমি মোডের লেখককে বাগ হিসাবে রিপোর্ট করার পরামর্শ দিই)। উদাহরণস্বরূপ, কোনও বাফারের হোয়াইটস্পেস-মোড সক্রিয় আছে কিনা তা পরীক্ষা করতে আপনি বলবেন when whitespace-mode।উপভোগ করুন! আরও বৃহত্তর এবং ক্লিনার ক্লিপ কোডে!