मोड-लाइन में मामूली मोड की सूची छिपाएं


22

मैं कुछ मामूली मोड का उपयोग करता हूं और आमतौर पर मुझे पता है कि कौन सी मामूली मोड हर प्रमुख मोड में सक्षम है। अगर मैं वास्तव में पूरी सूची देखना चाहता हूं, तो मैं दौड़ सकता हूं C-h v minor-mode-list

उसी समय, मेरी मोड लाइन वास्तव में बंद हो जाती है, इसलिए जब मैं लंबवत रूप से विभाजित होता हूं, तो कभी-कभी मैं मोड लाइन के अंत को नहीं पढ़ सकता हूं।

वास्तविक प्रश्न: मोड लाइन में मामूली मोड सूची दिखाने को कैसे अक्षम करें? उदाहरण के लिए, अब यह इस तरह दिख सकता है:

-:--- main.c        All (7,12)     (C/l FlyC SScr Abbrev Fill) [main] 16:19 0.45

मैं चाहता हूं कि यह और संक्षिप्त हो:

-:--- main.c        All (7,12)     (C/l) [main] 16:19


2
आप अमीर-अल्पसंख्यक मोड में भी देख सकते हैं ।
कौशल मोदी

जवाबों:


15

डिमिनिश मोड (मेल्पा में उपलब्ध) ऐसा करेगा।

(diminish 'projectile-mode)

2
यदि आप इसे पूरी तरह से छिपाने के बजाय मामूली मोड के नाम को छोटा करना चाहते हैं तो आप उपयोग कर सकते हैं(diminish 'projectile-mode "p")
erikstokes

5
यह भी ध्यान दें कि डिमिनिश का वास्तविक उपयोग (eval-after-load "filladapt" '(diminish 'filladapt-mode))(एमाक्स विकी से उदाहरण का उपयोग करके) (diminish 'filladapt-mode)किया गया है, न कि केवल उत्तर द्वारा सुझाया गया है। आप केवल लघु संस्करण का उपयोग कर सकते हैं यदि मोड पहले से लोड होने की गारंटी है।
फिल्स

15

Mbork टिप्पणी की रूप में, आप उपयोग कर सकते हैं delight.el मोड लाइन में या चुनिंदा संशोधित करने के लिए अक्षम नाबालिग (और वास्तव में प्रमुख) मोड पाठ।

फायदों में से एक यह है कि यह ध्यान रखता है eval-after-load(जिसे आपको अधिकांश उपयोग-मामलों में मैन्युअल रूप से diminish.el के साथ लिखने की आवश्यकता होती है), जो कॉन्फ़िगरेशन क्लीनर बनाता है। आपको अभी भी उसी जानकारी की आवश्यकता है - मोड का नाम, और पुस्तकालय जो इसे लागू करता है (जो एमएसीएस आपको बताएगा कि क्या आप इसे मोड के बारे में पूछते हैं) - लेकिन आप इसे एक ही रूप में लपेट सकते हैं:

 (require 'delight)
 (delight '((some-mode nil "some-library")
            (some-other-mode nil "some-other-library")))

(या कुछ वास्तविक उपयोग उदाहरणों के लिए ऊपर दिए गए लिंक का अनुसरण करें।)

मैं इस दृष्टिकोण को लेने की सलाह दूंगा , क्योंकि अगर आप सबसे मामूली मोड लाइटर टेक्स्ट नहीं चाहते हैं , तो एक अच्छा मौका है कि आप उनमें से कुछ को उपयोगी पाएंगे (और आप अभी भी उन लोगों को छोटा होने के लिए संशोधित कर सकते हैं)।

यदि आप वास्तव में सभी मामूली मोड लाइटर टेक्स्ट (और फिर से, मैं इसकी अनुशंसा नहीं करता) को खत्म करना चाहता हूं, तो आप mode-line-modesचर को संशोधित कर सकते हैं । मोड लाइन चर कुछ समय पहले बदल गए थे, इसलिए आप उपयोग करना चाह सकते हैं M-x find-variable RET mode-line-modes RETऔर फिर मैन्युअल रूप से अपनी डिफ़ॉल्ट परिभाषा को अनुकूलित कर सकते हैं , संबंधित अनुभाग को संपादित कर सकते हैं minor-modes-alist

बेशक, आपको इसे बनाए रखने की आवश्यकता होगी, जो इतना फ्लैश नहीं है, इसलिए आप मौजूदा मूल्य के भीतरminor-mode-alist प्रतीक को बदलना पसंद कर सकते हैं । निम्नलिखित कुछ हद तक कार्यान्वयन-विशिष्ट है, लेकिन निश्चित रूप से इसकी संपूर्णता में स्थापित होने की तुलना में अच्छा है , और आप इसे चालू और बंद कर सकते हैं।mode-line-modes

(define-minor-mode minor-mode-blackout-mode
  "Hides minor modes from the mode line."
  t)

(catch 'done
  (mapc (lambda (x)
          (when (and (consp x)
                     (equal (cadr x) '("" minor-mode-alist)))
            (let ((original (copy-sequence x)))
              (setcar x 'minor-mode-blackout-mode)
              (setcdr x (list "" original)))
            (throw 'done t)))
        mode-line-modes))

(global-set-key (kbd "C-c m") 'minor-mode-blackout-mode)

खैर, यह दुखद है कि कोई 'खुशी' पैकेज नहीं है।
मार्क कार्पोव 11

2
Emacs के पुराने होने और पैकेज के नए होने के साथ क्या है, उपयोगी पुस्तकालयों का एक ढेर है जिसमें पैकेज नहीं हैं। आप अपने आप को उस तरह से सीमित करने के लिए जा रहे हैं, मैं कम से रखने का सुझाव देते होता अल-प्राप्त है जो अन्य पुस्तकालय स्रोत प्रकार की एक विशाल विविधता के लिए एक प्रबंधक (अद्यतन करने शामिल है) के रूप में कार्य करेगा।
फिल्स

1
@ मुझे, मुझे पता है load-pathऔर require। जब मैंने एक साल पहले इसका उपयोग करना शुरू किया था, तो मैंने सभी Emacs पैकेजों को 'इंस्टॉल' किया था।
मार्क कार्पोव

3
मैंने अभी delightMELPA में जोड़ा है।
पवित्रता

1
nb delightइन दिनों GNU ELPA में है, और MELPA में नहीं है (यदि किसी को पिछली टिप्पणियों द्वारा भ्रमित किया जाता है)।
phils

8

कॉन्फ़िगरेशन के साथ रिच-अल्पसंख्यक का उपयोग करें :

(require 'rich-minority)
(rich-minority-mode 1)
(setf rm-blacklist "")

मेरे पास भी आपके जैसे विचार हैं, लेकिन मैंने मोड-लाइन को अधिक पागल बना दिया है :

  • सभी अवांछित रिक्त स्थान निकालें
  • बफ़र स्थिति जानकारी फ़ील्ड के सभी रिक्त स्थान और "मिनट-चौड़ाई" निकालें।
;; Remove all unwanted spaces
(setq-default mode-line-format
          '("%e" mode-line-front-space mode-line-mule-info mode-line-client mode-line-modified mode-line-remote mode-line-buffer-identification mode-line-position
        (vc-mode vc-mode) " "
        mode-line-modes mode-line-misc-info mode-line-end-spaces))
;; Remove all spaces and "min-width" of position info on mode-line
(setq mode-line-position
      `((1 ,(propertize
         " %p"
         'local-map mode-line-column-line-number-mode-map
         'mouse-face 'mode-line-highlight
         ;; XXX needs better description
         'help-echo "Size indication mode\n\
mouse-1: Display Line and Column Mode Menu"))
    (size-indication-mode
     (2 ,(propertize
          "/%I"
          'local-map mode-line-column-line-number-mode-map
          'mouse-face 'mode-line-highlight
          ;; XXX needs better description
          'help-echo "Size indication mode\n\
mouse-1: Display Line and Column Mode Menu")))
    (line-number-mode
     ((column-number-mode
       (1 ,(propertize
        "(%l,%c)"
        'local-map mode-line-column-line-number-mode-map
        'mouse-face 'mode-line-highlight
        'help-echo "Line number and Column number\n\
mouse-1: Display Line and Column Mode Menu"))
       (1 ,(propertize
        "L%l"
        'local-map mode-line-column-line-number-mode-map
        'mouse-face 'mode-line-highlight
        'help-echo "Line Number\n\
mouse-1: Display Line and Column Mode Menu"))))
     ((column-number-mode
       (1 ,(propertize
        "C%c"
        'local-map mode-line-column-line-number-mode-map
        'mouse-face 'mode-line-highlight
        'help-echo "Column number\n\
mouse-1: Display Line and Column Mode Menu"))))))
      )

अब, मैं हमेशा ट्विटर-मोड अधिसूचना और ऑर्ग-मोड के टाइमर: डी देख सकता हूं


5

यहाँ मेरे लिए क्या काम किया गया है:

(defvar hidden-minor-modes ; example, write your own list of hidden
  '(abbrev-mode            ; minor modes
    auto-fill-function
    flycheck-mode
    flyspell-mode
    inf-haskell-mode
    haskell-indent-mode
    haskell-doc-mode
    smooth-scroll-mode))

(defun purge-minor-modes ()
  (interactive)
  (dolist (x hidden-minor-modes nil)
    (let ((trg (cdr (assoc x minor-mode-alist))))
      (when trg
        (setcar trg "")))))

(add-hook 'after-change-major-mode-hook 'purge-minor-modes)

ड्रू की टिप्पणी के लिए धन्यवाद , मैंने इस समाधान की प्राप्ति में सुधार किया है। अब यह एसोसिएशन सूचियों के लाभों का उपयोग करता है और थोड़ा अधिक कुशल होना चाहिए ;-)


एफडब्ल्यूआईडब्ल्यू, यह पहले से अनलोड किए गए मामूली मोड को नहीं पकड़ेगा जो न तो मैन्युअल रूप से सक्षम होते हैं, न ही मोड जो गतिशील रूप से अपने लाइटर टेक्स्ट को अपडेट करते हैं (ऐसा नहीं है कि अन्य पुस्तकालय बाद में भी करते हैं)। लेकिन अन्यथा यह एक उचित व्यावहारिक दृष्टिकोण लगता है।
फिल्स

1
minor-mode-alistएक मुट्ठी होने की बात यह है कि प्रविष्टियों को जोड़ा जा सकता है और सिर पर छाया और अनशोल्ड प्रविष्टियों को हटा दिया जा सकता है और सूची में नीचे एक ही कुंजी है। यदि आप इस तरह की चीज़ करना चाहते हैं , तो प्रत्येक कुंजी के लिए बस पहली प्रविष्टि (पाया गया उपयोग assoc, परिवर्तित उपयोग setcarआदि) को बदलें , ताकि आप इस उपयोगी, इच्छित सुविधा को न खोएं।
आकर्षित किया

@ ड्रू, आप सही कह रहे हैं, मेरे सुधार को देखें मेरा समाधान।
मार्क करपोव

हाँ; मेरा मतलब यही था।
ड्रू

3

मैं अपना समाधान रिंग में फेंक दूंगा:

(defun modeline-set-lighter (minor-mode lighter)
  (when (assq minor-mode minor-mode-alist)
    (setcar (cdr (assq minor-mode minor-mode-alist)) lighter)))

(defun modeline-remove-lighter (minor-mode)
  (modeline-set-lighter minor-mode ""))

modeline-set-lighterआपको अपनी पसंद के किसी भी स्ट्रिंग में एक मामूली मोड का लाइटर सेट करने की अनुमति देता है। modeline-remove-lighterआपको मामूली मोड के लाइटर को पूरी तरह से हटाने की अनुमति देता है।

फिर, मेरे इनिट-फाइल के अंत में मैं इन कार्यों को मामूली मोड के लिए कहता हूं, जिनके प्रकाशकों को मैं संशोधित करना चाहता हूं:

(modeline-remove-lighter 'auto-complete-mode)
(modeline-remove-lighter 'git-gutter+-mode)
(modeline-remove-lighter 'guide-key-mode)
(modeline-remove-lighter 'whitespace-mode)
(modeline-set-lighter 'abbrev-mode " Abbr")
(modeline-set-lighter 'auto-fill-function (string 32 #x23ce))

2

आप निम्न तरीके से सभी छोटे मोडों को स्पष्ट रूप से निकाल सकते हैं:

(setq mode-line-modes
      (mapcar (lambda (elem)
                (pcase elem
                  (`(:propertize (,_ minor-mode-alist . ,_) . ,_)
                   "")
                  (t elem)))
              mode-line-modes))

यह भविष्य में परिभाषित मामूली मोड के लिए भी काम करेगा, क्योंकि यह अभी से पूरी तरह से उपयोग को हटा देता minor-mode-alistहै mode-line-format


1

यह ध्यान देने योग्य है कि use-package कम और खुशी का समर्थन करता है । यदि आप इसका उपयोग अपने पैकेजों को प्रबंधित करने के लिए करते हैं तो आप मोड लाइन में मामूली मोड्स को छिपा सकते हैं:

(use-package abbrev
  :diminish abbrev-mode
  :config
  (if (file-exists-p abbrev-file-name)
     (quietly-read-abbrev-file)))

0

मैं कुछ के लिए फैंसी नाम एक्सटेंशन के रूप में सरल रूप में स्थापित करने का बिंदु नहीं देखता:

(setcar (alist-get minor-mode minor-mode-alist) "")

उदाहरण के लिए:

(dolist (mode '(projectile-mode
                whitespace-mode
                hs-minor-mode
                outline-minor-mode
                auto-fill-function))
  (setcar (alist-get mode minor-mode-alist) ""))

आप इस तरह से किसी भी तरह का सामान कर सकते हैं। पाठ की जगह ऊपर से स्पष्ट है। इसके अलावा, उदाहरण के लिए, सूची की शुरुआत में फ्लाइमेक मोड लगाने के लिए:

(let ((mode (assq #'flymake-mode minor-mode-alist)))
  (setq minor-mode-alist (cons mode (remq mode minor-mode-alist))))
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.