先日は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) ;; 行番号の表示
ここまででこんな感じの見た目になると思います
総行数の表示
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)
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))))
Stopwatchを表示する
さらにもう一個だけ面白機能を追加しましょう
みなさん「自分がどれくらいの時間作業していたのか」とか「あとどれくらい集中して作業するべきか」とか考えていたりしませんか?
そういうときに逐一時計を見たり,作業時間をメモるのは面倒ですが,この機能を使えばそのあたりの効率改善ができます!(cf. Emacsでポモドーロテクニック)
githubにある拙作stopwatch.el
を使います
(制作にあたり@syohexさんのmode-line-timer.el
を参考にさせて頂きました)
これを使うと以下のようにMode Line最左端にインクリメンタルタイマーが表示されます!
さらにMacOS向けですが,設定した時間にNotificationが飛んできます
使い方は
-
~/.emacs.d/stopwatch/
にstopwatch.el
をcopy -
init.el
に以下のコードを記述 - Emacs上で
M-x stopwatch-start
- Notificationを飛ばしたい方は
M-x stopwatch-notification-time
で設定! - pauseとstopも同様に
M-x stopwatch-pause
,M-x stopwatch-stop
で出来ます
;; init.elに記述
(add-to-list 'load-path "~/.emacs.d/stopwatch")
(require 'stopwatch)
おわりに
みなさんのMode Line設定もぜひぜひ教えてください!
それではまた!