आप एमाक्स में सक्रिय मामूली मोड को कैसे सूचीबद्ध करते हैं?
आप एमाक्स में सक्रिय मामूली मोड को कैसे सूचीबद्ध करते हैं?
जवाबों:
सभी लघु मोड कमांड की एक सूची को चर में संग्रहीत किया जाता है 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))
एक चर में मामूली मोड की सूची को बचाने के लिए मत भूलना, अन्यथा आपको Emacs को पुनरारंभ करना होगा या स्मृति द्वारा उन्हें सक्षम करना होगा।
यदि आप सभी बफ़र्स के साथ प्रोग्राम करना चाहते हैं, जिनके पास एक निश्चित मोड सक्रिय है, तो सबसे अच्छा, सबसे न्यूनतर, सबसे स्वच्छ, अंतर्निहित समाधान इस प्रकार है:
(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
Emacs को यह बताने के लिए उपयोग करें कि शरीर के भीतर सभी कोड इस तरह से चलने चाहिए जैसे कि $buf
आप जो भी बफर स्क्रीन पर दिखा रहे हैं उसके बजाय बफर के अंदर चल रहा था ।when <some mode variable>
एक मोड सक्षम है या नहीं यह जांचने का सही तरीका है; आप if
इस तरह के अन्य तरीकों का भी उपयोग कर सकते हैं । किसी भी तरह से, लक्ष्य यह जांचना है कि बफर में एक मामूली या प्रमुख-मोड का मुख्य मोड चर सेट है या नहीं। लगभग सभी मोड एक "परिभाषित" मोड के माध्यम से एक चर को परिभाषित करते हैं, जो स्वचालित रूप से उन्हें मोड के नाम पर एक बफर-स्थानीय चर बनाने का कारण बनता है, जो कि यह कैसे काम करता है। और अगर उनके पास एक मानक चर नहीं है, तो अपने स्वयं के स्रोत कोड को देखें कि उनका "टॉगल" कोड यह निर्धारित करता है कि उन्हें कैसे चालू और बंद करना है। उनमें से 99% अपने मॉडेम के चर के अस्तित्व का उपयोग करते हैं (और यदि वे नहीं करते हैं, तो मैं यह सुझाव देता हूं कि मोड के लेखक के लिए बग के रूप में)। उदाहरण के लिए, यह जांचने के लिए कि क्या बफर में व्हॉट्सएप-मोड सक्रिय है, आप कहेंगे when whitespace-mode
।का आनंद लें! बाद में अधिक से अधिक और लिस्प कोड क्लीनर!