読者です 読者をやめる 読者になる 読者になる

git-gutter.el supports live update experimentally

emacs git-gutter

保存時等しか差分更新できないのはいけていないという意見をいただいたので,
保存しなくても差分情報を更新する機能を試験的に実装しました.
(本家 Sublime Text版や Vim版ではだいぶ前に実装されている機能です)

イメージ

設定例

git-gutter:update-interval(単位: 秒)が 0より大きいとその周期で更新します.
(ただし現状は idle timerで更新しているので, ガンガン書いているとき等だと
何の更新も行われません)

(custom-set-variables
 '(git-gutter:update-interval 2))

実装

gitコマンドだけでなんとかできるかと思って調べてみたんですが,
調べた限りうまくいきませんでしたね.


実装方法は以下のとおりです
1. git-gutterが有効かつ, バッファが未保存状態かを確認. そうでないなら何もしない
2. 現在の編集中のバッファの内容のハッシュ値を取得. 前回取ったハッシュ値と比較し, 同じであれば何もしない.
3. `git show :ファイル名`で該当ファイルの最新版のソースを取得. テンポラリファイルに書き出し
4. 現在のバッファの内容をテンポラリファイルに書き出し
5. 3., 4.で取得したファイルの差分を取る(非同期実行)
6. 差分情報を更新.


gitコマンドだけでうまくいく方法があれば教えていただければと思います.

おわりに

要望等ありましたら, twitterまたは github issuesまでお願いします.