모드 라인에서 보조 모드 목록 숨기기


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
다양한 소수 모드를 살펴볼 수도 있습니다.
Kaushal Modi

답변:


15

축소 모드 (Melpa에서 사용 가능)가이를 수행합니다.

(diminish 'projectile-mode)

2
마이너 모드의 이름을 숨기지 않고 (diminish 'projectile-mode "p")
간단히 줄이려면

5
또한 감소 의 실제 사용법은 답변에서 제안한 (eval-after-load "filladapt" '(diminish 'filladapt-mode))것이 아니라 (Emacs Wiki의 예제를 사용하는) (diminish 'filladapt-mode)것입니다. 모드가 이미로드 된 경우 짧은 버전 사용할 수 있습니다 .
phils

15

mbork가 언급했듯이 delight.el 을 사용 하여 모드 행에서 부 (및 주요) 모드 텍스트를 선택적으로 수정하거나 비활성화 할 수 있습니다 .

장점 중 하나는 eval-after-load(대부분의 사용 사례에서 diminish.el을 사용하여 수동으로 작성해야 함) 관리가 더 깔끔하다는 것입니다. 모드의 이름과 모드를 구현하는 라이브러리 (모드에 대해 물어 보면 Emacs가 알려줄 것임)와 같은 정보가 여전히 필요하지만, 모든 정보를 단일 형식으로 묶을 수 있습니다.

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

'기쁨'패키지가 없다는 것은 슬픈 일입니다.
Mark Karpov

2
무엇 이맥스 오래된되는 및 package.el 새로운 인으로하는 거기에 하지 않는 패키지가 유용한 라이브러리. 그런 식으로 자신을 제한하려는 경우 다양한 다른 라이브러리 소스 유형의 관리자 (업데이트 포함)로 작동하는 el-get 을 살펴 보는 것이 좋습니다 .
phils

1
@ 드류, 내가 알고 load-pathrequire. 1 년 전에 사용하기 시작할 때 이맥스 패키지를 모두 '설치'했습니다.
Mark Karpov

3
delightMELPA에 방금 추가 했습니다.
sanityinc

1
nb delight는 요즘 GNU ELPA에 있으며 MELPA에는 없습니다 (이전 의견에 혼란스러워하는 사람을 언급 한 경우).
phils

8

config와 함께 Rich-minority 를 사용하십시오 .

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

이제 트위터 모드 알림과 조직 모드 타이머를 항상 볼 수 있습니다. : D


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)

Drew의 의견 덕분 에이 솔루션의 구현을 개선했습니다. 이제 연결 목록의 이점을 사용하며 좀 더 효율적이어야합니다. ;-)


FWIW는 수동으로 활성화 된 이전에로드되지 않은 마이너 모드 나 더 가벼운 텍스트를 동적으로 업데이트하는 모드 (다른 라이브러리도 후자를 수행하지 않음)를 포착하지 않습니다. 그러나 그렇지 않으면 합리적으로 실용적인 접근법으로 보입니다.
phils

1
minor-mode-alist되는 alist이 엔트리는 상기와 동일한 키가 목록을 아래 unshadow 같이 그림자하는 헤드에 추가 및 제거 할 수 있다는 것이다. 당신이하고있는 일을하고 싶다면, 각 키에 대해 첫 번째 항목 (을 사용하여 찾 assoc거나 변경 setcar등)을 변경 하면 유용하고 의도 한 기능을 잃지 않도록하십시오.
Drew

@ 드류, 당신 말이 맞아요, 내 솔루션이 향상되었음을 알 수 있습니다.
마크 카르 포브

예; 그것이 제가 의미 한 바입니다.
Drew

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마이너 모드의 라이터를 완전히 제거 할 수 있습니다.

그런 다음 init 파일의 끝에서 라이터를 수정하려는 마이너 모드에 대해 이러한 함수를 호출합니다.

(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 감소와 즐거움지원 한다는 점 주목할 가치가 있습니다. 패키지를 관리하는 데 사용하는 경우 : diminish 또는 : delight 키워드를 추가하여 모드 행에서 부 모드를 숨길 수 있습니다.

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

이런 식으로 모든 종류의 작업을 수행 할 수 있습니다. 위의 텍스트 교체는 분명합니다. 또한 예를 들어 목록의 시작 부분에 flymake 모드를 설정하려면 다음을 수행하십시오.

(let ((mode (assq #'flymake-mode minor-mode-alist)))
  (setq minor-mode-alist (cons mode (remq mode minor-mode-alist))))
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.