モードラインのモード名表示を短縮する


今さらですが、
モードラインのモード名表示を短縮する方法はマイナーモードとメジャーモードでは異なります。

マイナーモード

マイナーモード名を短縮するときは、そのモードをロードしたあとでdiminishを使います。

(when (require 'diminish nil 'noerror)
  (eval-after-load "company"
      '(diminish 'company-mode "Cmp"))

メジャーモード

メジャーモード名を短縮するときは、diminishを使わず、そのモードにフックしてmode-name変数を直接書き変えます。

(add-hook 'emacs-lisp-mode-hook 
  (lambda()
    (setq mode-name "Elisp"))) 

実際の使用例

私はMELPAから落としたパッケージにはuse-package:diminishキーワードを使っています。→ こちらにまとめました。

対して、それ以外のEmacs標準のモード名はuse-packageを使わず下記のようにしています。1

(defmacro diminish-minor-mode (file mode &optional new-name)
  "https://github.com/larstvei/dot-emacs/blob/master/init.org"
  `(with-eval-after-load ,file
     (diminish ,mode ,new-name)))

(defmacro diminish-major-mode (hook new-name)
  `(add-hook ,hook #'(lambda ()
                    (setq mode-name ,new-name))))

;; minor mode
(diminish-minor-mode "eldoc" 'eldoc-mode "doc")

;; major mode
(diminish-major-mode 'emacs-lisp-mode-hook "Elisp")

参考

use-package でモード名を全消し or 短縮する
diminish
safe-diminish
cleaning up the mode-line


  1. safe-diminishありがたくパクらせていただきました。