LoginSignup
26
30

More than 5 years have passed since last update.

EmacsのMode Lineを強化する

Posted at

先日はEmacsの検索機能強化について「Emacsの補完&検索を超強化する」にて書かせていただきました.
次はEmacsの視認性を強化していきたいと思います.

まずはMode Line編です!(そのうちBuffer編も書きたいです)

基本設定

まずsmart-mode-lineを導入します!
smart-mode-lineは,特にMode Line用に色々とlispを書かずともいい感じにMode Lineを見やすく&使いやすくしてくれるpackageです!

(defvar sml/no-confirm-load-theme t)
(defvar sml/theme 'dark) ;; お好みで
(defvar sml/shorten-directory -1) ;; directory pathはフルで表示されたいので
(sml/setup)

Emacsでpackageを追加し続けていると,発動しているMinor Modeが多くなってきてしまい,Mode Lineが汚くなっちゃいます
なのでdiminishでMinor Mode名が表示されている部分を見やすくします

(require 'diminish)
(eval-after-load "company" '(diminish 'company-mode) "Comp") ;; 自分でMinor Mode名を定義
(eval-after-load "ivy" '(diminish 'ivy-mode)) ;; 非表示設定(この例だとivyがMinor Mode欄から消える)

また,以下は多分必須設定ですね

(column-number-mode t) ;; 列番号の表示
(line-number-mode t) ;; 行番号の表示

ここまででこんな感じの見た目になると思います

modeline.jpg

総行数の表示

current bufferの総行数を表示します
なんだかんだあると便利です!

(require 'total-lines)
(global-total-lines-mode t)
(defun my-set-line-numbers ()
  (setq-default mode-line-front-space
        (append mode-line-front-space
            '((:eval (format " (%d)" (- total-lines 1))))))) ;; 「" (%d)"」の部分はお好みで
(add-hook 'after-init-hook 'my-set-line-numbers)

total_line.jpg

Mode Lineを光らせる

ちょっと面白い改造します
Emacsがbell音を出す設定は切ってると思うんですが,今回はその部分をちょっとだけ置き換えます.
下の設定で,Emacsがbell音を出す代わりにModelineを紫に一瞬光らせます!
「mode-line-bell」「Emacs Wiki」を参照しました)

;; エラー音を鳴らなくする(多分みんなやってる)
(setq ring-bell-function 'ignore)

;; mode line を flash!!
(setq ring-bell-function
      (lambda ()
        (let ((orig-fg (face-background 'mode-line)))
          (set-face-background 'mode-line "purple4")
          (run-with-idle-timer 0.1 nil
                               (lambda (fg) (set-face-background 'mode-line fg))
                               orig-fg))))

また,以下を追記するとsave成功時に緑に光ります!
きちんとsaveできたのかパッと見てわかるようになるのでオススメです!

;; save時にmode line を光らせる
(add-hook 'after-save-hook
      (lambda ()
        (let ((orig-fg (face-background 'mode-line)))
          (set-face-background 'mode-line "dark green")
          (run-with-idle-timer 0.1 nil
                   (lambda (fg) (set-face-background 'mode-line fg))
                   orig-fg))))

Untitled5.gif

Stopwatchを表示する

さらにもう一個だけ面白機能を追加しましょう
みなさん「自分がどれくらいの時間作業していたのか」とか「あとどれくらい集中して作業するべきか」とか考えていたりしませんか?
そういうときに逐一時計を見たり,作業時間をメモるのは面倒ですが,この機能を使えばそのあたりの効率改善ができます!(cf. Emacsでポモドーロテクニック

githubにある拙作stopwatch.elを使います
(制作にあたり@syohexさんのmode-line-timer.elを参考にさせて頂きました)
これを使うと以下のようにMode Line最左端にインクリメンタルタイマーが表示されます!

working.png

さらにMacOS向けですが,設定した時間にNotificationが飛んできます

33809300-2e0c9878-de38-11e7-912f-cabab3c9f773.png

使い方は
1. ~/.emacs.d/stopwatch/stopwatch.elをcopy
2. init.elに以下のコードを記述
3. Emacs上でM-x stopwatch-start
4. Notificationを飛ばしたい方はM-x stopwatch-notification-timeで設定!
5. pauseとstopも同様にM-x stopwatch-pause, M-x stopwatch-stopで出来ます

;; init.elに記述
(add-to-list 'load-path "~/.emacs.d/stopwatch")
(require 'stopwatch)

おわりに

みなさんのMode Line設定もぜひぜひ教えてください!
それではまた!

26
30
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
26
30