EmacsのMercurialフロントエンドはmonkyがおすすめ


Git、大人気ですね。bitbucketもとうとうGitをサポートするみたいです。

Bitbucket now rocks Git – Bitbucket blog

bitbucketは、デザインこそ残念な感じですが容量制限なしでクローズドリポジトリも使い放題ということで、内容としてはGithubよりもかなり素敵。
これを機にbitbucketユーザが広がるといいなーと思っています。

bitbucketといえば、Mercurial。僕も初めはGitを使っていたのですが、あのややこしい雰囲気と自分のネットワーク環境だと使うのがかなりしんどそうだったので、それ以降メインはMercurialになってます。そこらへんの経緯は以前書いた日記に詳しく書いてます。

gitやめてmercurialとtortoiseHGをインストール

Mercurial自体はわかりやすくてとても気にいってるのですが、残念なことにEmacsのフロントエンドについてはあまり選択肢がなく、 その少ない選択肢の使い勝手もあまり良いとはいえませんでした。
それと、TortoiseHgの完成度がとても高かったので、専らTortoiseHgから使っていたのですがコミットログ書きやMQの操作など、エディットに近いところにある操作はEmacsからしたい!!と常々思っていた折、ようやく素晴らしいelispを見つけましたので、ご紹介します。

monkyとは

monky.elはEmacsのMercurialフロントエンド。Anantha Kumaranさんが開発してます。

monky.el at master from ananthakumaran/monky – GitHub

monkyの良いところは、まずひととおりのHgコマンドがmonkyから使えるところです。EmacsではこれまでもahgやDVCなどがあったのですが、ひととおりの操作をしようと思うとどうしてもコマンドを使う場面がでてきてしまって、結局いつの間にから使わなくなっていました。monkyだとEmacsから出ないで、操作が完結します。

もうひとつの特徴がMagitと操作体系が似ている点です。名前からも何となくわかるようにmonkyはMagitをかなり参考にしています。なのでこれまでmagit.elを使っていたGitユーザは違和感なく操作できるんではないかと思います。

出自がそんな感じなので、関数にstageだのfetchだのcheckoutだのMercurialになじみのない単語がでてきますが、Mercurialを使っている人はだいたいGitも使えるので(ェ)、問題ないかと思います。

インストール

monkyは、Marmaladeというelispのリポジトリサイトに登録されています。Emacs24を使われているか、package.elをインストールしていてMarmaladeを登録しているならばM-x list-packages として表示される一覧からmonkyを選択することでお手軽にインストールできます。

package.elの使い方やMarmaladeの登録の仕方については、以前書いた日記を参考にされてみてください。

Marmaladeはお手軽感が素敵なEmacs Lispのリポジトリサイト

package.elのインストールがめんどいという方はREADMEを参考にインストールすると良いと思います。使い方ですがドキュメントがしっかり書かれてありますのでそちらを見るとだいたいわかると思います。

Monky User Manual

Magitを使ったいた方はMagitと同じように使えばだいたい使えます。

e2wmを使えばvcsの垣根がなくなる

何回も書いているとおり、monkyのウリはMagitとよく似ているという点。ならば、vcsの違いを意識させないようにリポジトリ操作ができるのではないかと思いまして、kiwanamiさんが作られたe2wm-vcsにmonkyのパースペクティブを追加してみました。

myuhe/emacs-window-manager – GitHub

起動した時の画面構成は次のような感じになります。

https://cacoo.com/api/v1/diagrams/D85Mnj5qnKif3HX0-B3C1D.png

e2wmやe2wm-vcsについては、作者のkiwanamiさんが詳しく書かれていますので、そちらを参考にされてください。

広くなった画面を有効利用できる、Emacs内Window管理ツール e2wm.el を作ってみた。(旧名称 ewm.el) – 技術日記@kiwanami
e2wm の magit パースペクティブ – 技術日記@kiwanami

monkyのパースペクティブに加えて、e2wm:dp-vcsという関数を追加しました。これは, 今のバッファがどのvcsの管理下にあるかを判読して空気を読んでそのvcsのパースペクティブを開く関数になります。

これによって、コード書く→コミットする のような流れがvcsの違いを気にせずできるようになるんではないかと思います。

同じDVCSであるGitとMercurialはかなり似ていますが、extensionの組み合わせなどによっていろいろなユースケースに対応できるMercurialもとても面白いプロダクトです。Gitサポートをきっかけにbitbucketに登録した方もこれを機にMercurialを使ってみてはいかがでしょうか。