Mod satırındaki küçük modların listesini gizle


22

Birkaç küçük mod kullanıyorum ve genellikle her büyük modda hangi küçük modun etkinleştirildiğini biliyorum. Tam listeyi gerçekten görmek istersem koşabilirim C-h v minor-mode-list.

Aynı zamanda, mod satırım gerçekten tıkanıyor, bu yüzden çerçeveyi dikey olarak böldüğümde, bazen mod satırının sonunu okuyamıyorum.

Gerçek soru: Mod satırında küçük modlar listesinin gösterilmesi nasıl devre dışı bırakılır? Örneğin, şimdi şöyle görünebilir:

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

Daha kısa görünmesini istiyorum:

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


2
Zengin azınlık moduna da bakabilirsiniz .
Kaushal Modi

Yanıtlar:


15

Azalan mod (Melpa'da mevcuttur) bunu yapar.

(diminish 'projectile-mode)

2
Sadece tamamen gizlemek yerine küçük modun adını kısaltmak istiyorsanız kullanabilirsiniz(diminish 'projectile-mode "p")
erikstokes

5
Ayrıca, yalnızca yanıtta belirtildiği gibi , gerçekte azalan kullanımın (eval-after-load "filladapt" '(diminish 'filladapt-mode))(Emacs Wiki'deki örneği kullanarak) olduğunu unutmayın (diminish 'filladapt-mode). Sen olabilir sadece mod zaten yüklenecek garanti Kısacası sürümünü kullanın.
phils

15

Mbork yorumladı gibi, kullanabilirsiniz delight.el modu doğrultusunda seçici değiştirmek veya devre dışı bırakmak minör (ve aslında majör) modunda metin.

Avantajlardan biri eval-after-load, yapılandırmayı daha temiz hale getiren (çoğu kullanım durumunda el ile azaltmanız gerekir. El ile yazmanız gerekir). Yine de aynı bilgiye ihtiyacınız var - modun adı ve onu uygulayan kütüphane (Emacs mod hakkında sorarsanız size söyleyecektir) - ancak hepsini tek bir formda toplayabilirsiniz:

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

(Veya bazı gerçek kullanım örnekleri için yukarıdaki bağlantıyı izleyin.)

Bu yaklaşımı benimsemenizi tavsiye ederim, çünkü çoğu küçük modda daha açık renkli metin istemeseniz bile , bazılarını yararlı bulabilmeniz için iyi bir şans vardır (ve bunları daha kısa olacak şekilde değiştirebilirsiniz).

Gerçekten hepsini ortadan kaldırmak istiyorsanız küçük modlu daha açık metinleri (ve tekrar önermiyorum), mode-line-modesdeğişkeni değiştirebilirsiniz . Mod satırı değişkenleri bir süre önce değişti, bu yüzden M-x find-variable RET mode-line-modes RETilgili bölümü düzenleyerek varsayılan tanımınızı kullanmak ve sonra manuel olarak uyarlamak isteyebilirsiniz minor-modes-alist.

Tabii ki o zaman bunu korumak gerekir, ki bu çok flaşlı değil, bu yüzden minor-mode-alistsembolü mevcut değer içinde değiştirmeyi tercih edebilirsiniz . Aşağıdakiler, uygulamaya özgüdür, ancak kesinlikle mode-line-modesbütünüyle ayarlanmaktan daha iyidir ve onu açıp kapatabilirsiniz.

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

Peki, 'lokum' paketinin olmaması üzücü.
Mark Karpov

2
Emacs eski ve paket ile. Yeni olmakla birlikte, paketleri olmayan yararlı kitaplıklar yığını var. Kendinizi bu şekilde sınırlayacaksanız, çok çeşitli diğer kütüphane kaynak türleri için bir yönetici (güncelleme dahil) görevi görecek el-get'e bakmanızı öneririm .
phils

1
@ Çekti, biliyorum load-pathve require. Bir yıl önce kullanmaya başladığımda tüm Emacs paketlerini bu şekilde 'yüklerdim'.
Mark Karpov

3
delightMELPA'ya yeni ekledim .
sanityinc

1
nb delightbu günlerde GNU ELPA'da ve MELPA'da değil (önceki yorumların karışması durumunda bahsediliyor).
phils

8

Config ile Rich-azınlık kullanın :

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

Ben de senin gibi bir düşüncem var, ama mod çizgisini daha paranoyak olarak kısaltıyorum :

  • Tüm istenmeyen alanları kaldır
  • Arabellek konumu bilgi alanının tüm boşluklarını ve "minimum genişliğini" kaldırın.
;; 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"))))))
      )

Artık her zaman Twitter modu bildirimini ve Org modu zamanlayıcısını görebiliyorum: D


5

İşte benim için işe yarayan:

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

Drew'un yorumu sayesinde , bu çözümün gerçekleştirilmesini geliştirdim. Şimdi ilişkilendirme listelerinin faydalarını kullanıyor ve biraz daha verimli olmalı ;-)


FWIW, manuel olarak etkinleştirilen önceden yüklenmemiş küçük modları veya daha açık metinlerini dinamik olarak güncelleyen modları yakalamaz (diğer kütüphanelerin ikincisini de yapmaz). Ancak aksi takdirde makul derecede pratik bir yaklaşım gibi görünüyor.
phils

1
minor-mode-alistBir alist olma noktası, girişlerin aynı tuşa sahip listenin aşağısında gölge ve gölgelendirilmemiş girişlere eklenmesi ve kaldırılmasıdır. Yaptığınız türden bir şey yapmak istiyorsanız, her bir tuş için ilk girişi (kullanarak assoc, kullanarak değiştirerek setcarvb.) Değiştirin , böylece bu kullanışlı, amaçlanan özelliği kaybetmezsiniz.
Drew

@ Çekti, haklısın, benim çözümümü geliştirdim.
Mark Karpov

Evet; demek istediğim şey o.
Drew

3

Buna benim çözümümü de ringe atacağım:

(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-lighterküçük bir modun çakmağını istediğiniz herhangi bir dizeye ayarlamanızı sağlar. modeline-remove-lighterküçük bir modun çakmağını tamamen çıkarmanızı sağlar.

Daha sonra, init dosyamın sonunda, çakmaklarını değiştirmek istediğim küçük modlar için bu işlevleri çağırıyorum:

(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

Ayrıca tüm küçük modları aşağıdaki şekilde açık bir şekilde kaldırabilirsiniz:

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

O sadece tamamen kullanılmasını kaldırır çünkü bu aynı zamanda, ileride tanımlanan minör modlar için çalışacaktır minor-mode-alistdan mode-line-format.


1

use-package Azalan ve zevk veren destekler . Paketlerinizi yönetmek için kullanırsanız, kük modları: diminish veya: delight anahtar sözcüklerini ekleyerek mod satırında gizleyebilirsiniz.

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

0

Ben gibi basit bir şey için fantezi adlı uzantıları yükleme noktasını görmüyorum:

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

Örneğin:

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

Bu şekilde her türlü şeyi yapabilirsiniz. Metin değiştirmek yukarıdakilerden açıktır. Ayrıca, örneğin, listenin başına flymake modunu koymak için:

(let ((mode (assq #'flymake-mode minor-mode-alist)))
  (setq minor-mode-alist (cons mode (remq mode minor-mode-alist))))
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.