これまで、emacs上で行ごとの変更状況を表示するのに、git-gutter.el を使用してきました。約4年前 から使用しており、今現在でも問題なく動いているため特に不満はなかったのですが、emacs-jpでdiff-hl の話を聞き、見た目が良いな、と思ったのでdiff-hlに移行しました。

git-gutterの見た目: git-gutter

diff-hlの見た目: diff-hl

fringeを使用するようになったことでフレームが少しスッキリしました。

問題が一点だけあって、私は普段macOS上でemacs-mac を使用しているのですが、frameを複数に分割したとき、一番左のwindowでは問題なく表示されたのですが、右側のwindowでは縦フチが表示されませんでした。

右側のwindowで縦フチが表示されない問題

emacsを起動した後に手動で(fringe-mode '(9 . 8))などとしてfringeの幅を広げると上手く表示される一方、default-frame-alistに広げた幅を入れても何故か上手く表示がされない状態で起動してきたため、diff-hl-modeを有効化した後に幅を広げないと上手く調整がきかないのか、と思ったので、次のようにdiff-hl-modeを呼び出してset-frame-parameterする形で解消しました:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
;; show git diff parameter on fringe
(use-package diff-hl
  :ensure t
  :diminish
  :hook (magit-post-refresh . diff-hl-magit-post-refresh)
  :init
  (global-diff-hl-mode)
  ;; somehow the left line is not drawn well without setting left-fringe
  ;; parameter after diff-hl-mode is enabled
  (diff-hl-mode)
  (set-frame-parameter nil 'left-fringe 9)
  (diff-hl-flydiff-mode))

正直イマイチ感がすごいので、良い解決方法をご存じの方がいたら教えてください。