Kentaro Kuribayashi's blog

Software Engineering, Management, Books, and Daily Journal.

Gitとかで変更があった時に自動でrevert-bufferする

EmacsとGitとを用いて開発してる際、たとえばgit checkoutした後、実際のファイルとバッファが不整合な状態になって、revert-bufferしないまま保存しようとすると「ファイルが変更されてるけど、どうすんの?」とかいわれて鬱陶しい。しかも、auto-save-buffers-enhancedしてたりすると、それが延々とまらなくなって、ものすごく大変なことになったりする。

いままでいちいちrevert-bufferしてたのだけど、明らかにあほっぽいなと思ったので、どうにかならないか調べてみたところ、こんな感じでauto-revert-modeを使ってやるとよさそう。なんらかのvcの管理下にあるかどうかを`vc-backend'で調べるのは、もっとちゃんとしたやりかたがありそうだけど。

;; ↓こいつをnon-nilにしておくと、vcsによる変更もチェックしてくれる
(setq auto-revert-check-vc-info t)

;; こちらは変更する必要ないけど、早いほうがいいので1とかしてみた
(setq auto-revert-interval 1)

(add-hook 'find-file-hook                                                                                                                                                          
          '(lambda ()                                                                                                                                                              
             (when                                                                                                                                                                 
                 (and buffer-file-name                                                                                                                                             
                      (vc-backend buffer-file-name))                                                                                                                               
               (auto-revert-mode))))

このあたり、Git用elispを用いて全部Emacsの中でやってると良きに計らってくれたりすることもあるようだけど、普通にshellからしか使ってないので。