आप एमाक्स में सक्रिय मामूली मोड को कैसे सूचीबद्ध करते हैं?


जवाबों:


125

C-h mया M-x describe-modeसभी सक्रिय मामूली मोड (और प्रमुख मोड) और प्रत्येक का एक संक्षिप्त विवरण दिखाता है।


21

सभी लघु मोड कमांड की एक सूची को चर में संग्रहीत किया जाता है 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)))

नोट: यह केवल वर्तमान बफर के लिए काम करता है (क्योंकि मामूली मोड केवल कुछ बफ़र्स में सक्षम हो सकते हैं)।


मानचित्र के अंदर सूची से जोड़ना? जटिल।
जॉकवे

4
@ जॉकवे मेरा सबसे गौरवपूर्ण क्षण नहीं है।
ट्रे जैक्सन

आप के boundpबजाय का उपयोग symbolpकर छुटकारा पा सकते हैं condition-case
लस्सी

4

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 को पुनरारंभ करना होगा या स्मृति द्वारा उन्हें सक्षम करना होगा।


3

यदि आप सभी बफ़र्स के साथ प्रोग्राम करना चाहते हैं, जिनके पास एक निश्चित मोड सक्रिय है, तो सबसे अच्छा, सबसे न्यूनतर, सबसे स्वच्छ, अंतर्निहित समाधान इस प्रकार है:

(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))))

यह निम्न कार्य करता है:

  1. सूची के buffer-listप्रमुख पर वर्तमान में सक्रिय बफ़र के साथ सभी बफ़र्स की एक सूची प्राप्त करें (इसलिए इसका उपचार पहले किया जाता है, आमतौर पर आप क्या चाहते हैं, लेकिन current-bufferपरवाह न करने पर पैरामीटर छोड़ दें )।
  2. बफर सूची के माध्यम से लूप करें और चर को प्रत्येक बफर नाम असाइन करें $buf
  3. with-current-buffer $bufEmacs को यह बताने के लिए उपयोग करें कि शरीर के भीतर सभी कोड इस तरह से चलने चाहिए जैसे कि $bufआप जो भी बफर स्क्रीन पर दिखा रहे हैं उसके बजाय बफर के अंदर चल रहा था ।
  4. when <some mode variable>एक मोड सक्षम है या नहीं यह जांचने का सही तरीका है; आप ifइस तरह के अन्य तरीकों का भी उपयोग कर सकते हैं । किसी भी तरह से, लक्ष्य यह जांचना है कि बफर में एक मामूली या प्रमुख-मोड का मुख्य मोड चर सेट है या नहीं। लगभग सभी मोड एक "परिभाषित" मोड के माध्यम से एक चर को परिभाषित करते हैं, जो स्वचालित रूप से उन्हें मोड के नाम पर एक बफर-स्थानीय चर बनाने का कारण बनता है, जो कि यह कैसे काम करता है। और अगर उनके पास एक मानक चर नहीं है, तो अपने स्वयं के स्रोत कोड को देखें कि उनका "टॉगल" कोड यह निर्धारित करता है कि उन्हें कैसे चालू और बंद करना है। उनमें से 99% अपने मॉडेम के चर के अस्तित्व का उपयोग करते हैं (और यदि वे नहीं करते हैं, तो मैं यह सुझाव देता हूं कि मोड के लेखक के लिए बग के रूप में)। उदाहरण के लिए, यह जांचने के लिए कि क्या बफर में व्हॉट्सएप-मोड सक्रिय है, आप कहेंगे when whitespace-mode
  5. उसके बाद, यह केवल "x" और उस बफर के नाम के साथ संदेश बफर को एक संदेश आउटपुट करता है, जिसमें मोड सक्रिय था। यहीं पर आपको अपना खुद का कोड डालना होगा, जो भी आप खोजे गए बफर के साथ करना चाहते हैं।

का आनंद लें! बाद में अधिक से अधिक और लिस्प कोड क्लीनर!


2

यहां कुछ तरीकों के समान एक सरल वैकल्पिक स्निपेट है जो पहले से ही अन्य उत्तरों में संबोधित किया गया है:

(delq nil
  (mapcar
    (lambda (x)
      (let ((car-x (car x)))
        (when (and (symbolp car-x) (symbol-value car-x))
          x)))
    minor-mode-alist))
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.