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経験者には馴染みやすいかもしれない。