emacsからのmercurialの操作にmonkyを使ってみた

わりと長い間仕事でsubversionを使っていて、emacs上ではdsvnを操作してましたが
最近mercurialを使うことになったので、monky.elというライブラリを試してみました

https://github.com/ananthakumaran/monky/blob/master/monky.el

インストール

Marmaladeに登録されているので、M-x list-packagesからインストールします

参考
http://marmalade-repo.org/
http://sheephead.homelinux.org/2011/06/17/6724/

使い方

リポジトリ内のファイルを開いているか、diredでリポジトリ内のディレクトリを開いている状態で
M-x monky-statusで ステータスを表示するバッファが開きます

コミットメッセージが文字化けしている場合はmonky-hg-process-environmentをカスタマイズ
することでHGENCODINGを指定できます


(monky-hg-process-environment
   (quote ("TERM=dumb" "HGPLAIN=" "LANGUAGE=C" "HGENCODING=utf-8")))

以下にキーマップと挙動をまとめてみました。

monky関連のバッファで共通の操作

キー function 動作
n monky-goto-next-section monkyバッファの次のセクションにカーソル移動する
p monky-goto-previous-section monkyバッファの前のセクションにカーソル移動する
RET monky-visit-item カーソル位置のファイルを開く
TAB monky-toggle-section monkyバッファのセクション表示非表示をトグルする
g monky-refresh 表示をリフレッシュする
$ monky-display-process 実際に実行されているコマンドをバッファに表示
: monky-hg-command ミニバッファに「Run hg like this:」と表示され手入力でhgコマンドを実行できる
l monky-log monky-logバッファが開き、ログが表示される
b monky-branches monky-branchesバッファが開き、ブランチ一覧が表示される
q monky-queue monky-queueバッファが開き、キュー一覧が表示される

ステータスバッファでの操作

キー function 動作 command
s monky-stage-item Untracked fileセクションのカーソル位置のファイルをChangesセクションに移動する
(hg add ファイル名)
Changesセクションのカーソル位置のファイルをStaged changeセクションに移動する
hg add
S monky-stage-all ChangesセクションのすべてのファイルをStaged changeセクションに移動する
u monky-unstage-item Staged changeセクションのファイルをChangesセクションに移動する
U monky-unstage-all Staged changeセクションのすべてのファイルをChangesセクションに移動する
c monky-log-edit monky-edit-logバッファを開き、コミットログの入力待ちになる
C monky-checkout ミニバッファに「Update to:」と表示される。リビジョンを入力し、updateする hg update <指定したリビジョン>
B monky-backout ミニバッファに「Backout to:」と表示される。リビジョンを入力し、Enterを入力するとmonky-edit-logバッファが開く
backoutのコミットログを入力して「C-c C-c」することでbackoutを実行する
hg backout --merge --logfile - <指定したリビジョン>
P monky-push push hg push --branch default
f monky-pull pull hg pull default
F monky-fetch http://mercurial.selenic.com/wiki/FetchExtension hg fetch default --config extensions.fetch=
k monky-discard-item ファイルを削除
m monky-resolve-item マージでコンフリクトしたファイルをresolvedにする hg resolve --mark <ファイル名>
x monky-unresolve-item resolvedになったファイルをunresolvedに戻す hg resolve --unmark <ファイル名>
X monky-reset-tip コミットされていない全ての変更を元に戻す hg update --clean

monky-logバッファでの操作

キー function 動作 command
e monky-log-show-more-entries ログのページ送り
C monky-checkout-item カーソル位置のリビジョンにupdateする hg update <指定したリビジョン>
B monky-backout-item カーソル位置のコミットのバックアウトを行う hg backout --merge --logfile - <指定したリビジョン>

monky-branchesバッファでの操作

キー function 動作 command
C monky-checkout-item カーソル位置のリビジョンにupdateする hg update <指定したリビジョン>

monky-edit-logバッファでの操作

キー function 動作 command
C-c C-c monky-log-edit-commit コミットする hg commit
C-c C-k monky-log-edit-cancel-log-message コミットとりやめ


mergeとかbranch切る、とかrollbackとかは無いんですが、monky-hg-commandでミニバッファからなんでもできるので便利です。
あとgitみたいに「ステージに追加」「ステージをコミット」ができるのが、git経験者には馴染みやすいかもしれない。