egg.elを設定してみた

gitのEmacsインターフェースはegg.elがいい。

とりあえず、フォントが見づらいのでM-x list-faces-displayでegg-*からvariable-pitchとなっているフェイスをなんとかした。色もあわないのでてきとーに設定。

さて、以前git stashが便利だと教えてもらったのでegg.elで使えるか確認。egg-stashコマンドがあるからegg.elで使えるようだ。しかし、describe-bindingsで調べてみてもキーには割り当てられていない。自分で設定しないといけないようだ。egg-stashはstashの一覧表っぽい。とりあえず一番よく使うのが今やっている作業を置いといて〜って感じなので一覧まではちょっと大袈裟かもしれない。
もうちょっと調べてみると、egg-buffer-stash-wipというコマンドが今のファイルに対してstashを実行するっぽいことがわかった。で、stashから戻すにはegg-stash-buffer-popのようだ。こういうコマンドを見つけるのは、anything.el + anything-match-plugin.elによる絞り込み検索によるもの。本当に助かる。

egg.elで気がきいてるなーって思うのは、慣れ親しんだEmacs VCのキーバインドが使えるということ。何気にC-x v vを押すと次やるべきことを教えてくれる。これには感動した。*1そこにstash関連のコマンドを割り当ててみた。だけどいちいちeggのバッファがポップアップするのがうざい…

(define-key egg-file-cmd-map "z" 'egg-buffer-stash-wip) ; C-x v z
(define-key egg-file-cmd-map "Z" 'egg-stash-buffer-pop) ; C-x v Z

egg.elはそれなりに使いやすいとは思うけど、いかんせんコマンドの数が多すぎる印象がある。たとえば、ログのバッファでSPCを押せばdiffやらログの詳細が出てくるのだが、閉じるのはhを押さないといけない。で、再び詳細を開くのにSPCではなくてhだ。そう考えるとSPCがもうちょっと空気読んでくれるといいのだが。
あと、C-x v lはVC的には「そのファイルの」ログを閲覧するものだと思うが、プロジェクト内の全ファイルのログが出てくるから困る。だからそのファイルのログだけを見たいっつーの。

(defun git-log-file ()
  (interactive)
  (shell-command (format "git log %s" buffer-file-name) "*git-log*"))
(define-key egg-file-cmd-map "l" 'git-log-file)

VCだとC-x v l→dでログからdiffを見られるが、eggだとdじゃなくて「=」になってる。ふつーdだろ。

(define-key egg-diff-section-map "d" 'egg-diff-section-cmd-ediff)
(define-key egg-staged-diff-section-map "d" 'egg-staged-section-cmd-ediff3)
(define-key egg-unstaged-diff-section-map "d" 'egg-unstaged-section-cmd-ediff)
(define-key egg-unmerged-diff-section-map "d" 'egg-unmerged-section-cmd-ediff3)
(define-key egg-hunk-section-map "d" 'egg-diff-section-cmd-ediff)
(define-key egg-staged-hunk-section-map "d" 'egg-staged-section-cmd-ediff3)
(define-key egg-unstaged-hunk-section-map "d" 'egg-unstaged-section-cmd-ediff)
(define-key egg-unmerged-hunk-section-map "d" 'egg-unmerged-section-cmd-ediff3)
(define-key egg-log-commit-map "d" 'egg-log-buffer-diff-revs)
(define-key egg-log-diff-map "d" 'egg-diff-section-cmd-ediff)
(define-key egg-log-hunk-map "d" 'egg-diff-section-cmd-ediff)

*1:新しいものになかなかなじめず、長年使ってきたものを捨てられないと思うあたりは自分がだんだん年寄り化してきたことを感じる。若い頃と違って学習コストはかなり増えている。