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