sakito - Emacsがすきすぎる

 | 

2010-03-13Mercurial の merge を Emacs で このエントリーを含むブックマーク

GUIEmacs で merge を実施するための設定をします。 emacscliet を利用します。

.emacs.d/init.el(Emacs21以前の人は .emacs.el) に以下のように設定します。

(require 'server)
(unless (server-running-p) (server-start))
(setq server-visit-hook
      '(lambda () 
         (raise-frame (selected-frame))
         (x-focus-frame (selected-frame))))

elscreen を利用している人は elscreen-server(ftp://ftp.morishima.net/pub/morishima.net/naoto/ElScreen/elscreen-server-0.2.0.tar.gz)も設定しておくと便利です。

(require 'elscreen-server)

.hgrc 等に emacsclient を呼ぶための設定をします。

[merge-tools]
emacsclient.args = --eval "(ediff-merge-with-ancestor \"$local\" \"$other\" \"$base\" nil \"$output\")"

これで hg merge したり、hg up で merge が発生したときに Emacs を emacscliet 経由で呼びます。

Terminal 内の Emacs を利用する場合は .hgrc を以下のように設定すると良いです。

[merge-tools]
emacs.args = --eval "(ediff-merge-with-ancestor \"$local\" \"$other\" \"$base\" nil \"$output\")"

ediff-merge-with-ancestor が呼ばれます。

n キーで下の差分、p キーで上の差分、a で左側を反映、b で右側を反映、q で現在の変更を保存して終了、? で help の表示非表示切り替え、になります。

merge するファイルが多数あっても q で終了すると次の merge に移行します。

操作は ediff と同じになります。

ediff のコントロールウィンドウがうざい人は以下を .emacs.d/init.el に設定しておくと良いでしょう。

;; ediff の操作用小ウィンドウを新規 frame にしない
(setq ediff-window-setup-function 'ediff-setup-windows-plain)
 |