e2wm の magit パースペクティブ

Emacs のウインドウ管理ツール e2wm の magit パースペクティブを作ってみたので簡単に紹介します。

magit は、 Emacs の git インタフェースです。

導入方法は後ろの方にあります。

画面と概要

コード編集用の画面から、さっと magit 用のパースペクティブに切り替えます。



パースペクティブの切り替え

M-x e2wm:dp-magit とやるのは大変なので、普通は適当なキーバインドに割り当てます。自分の所では M-w に割り当てています。

magit パースペクティブの画面は以下のようです。



各ウインドウの役割

中央に現在編集中のプロジェクトの magit-status バッファを表示し、右側にブランチ一覧と履歴を表示します。右側のブランチ一覧と履歴は参考程度ですので、基本的には真ん中の magit-status バッファで作業をします。ということで、 magit を既に使っている人なら特に覚えることはありません。

magit については以下の本家マニュアルが詳しいです。一通り読むと大体使えると思います。

ブランチ、履歴のブラウズ

ブランチ一覧は、 magit-show-branches コマンドを実行したバッファになっていますので、ブランチの切り替え(git checkout とか)が出来ます。

また、履歴一覧は、 magit-display-log コマンドを実行したバッファになっています。このバッファから n や p などのキーバインドで、コミット履歴を次々と見ていくことが出来ます。コミットの詳細は真ん中のメインのウインドウに表示されます。(簡単な対応なのでちょっとカーソールの動きが若干おかしいですが、動作は問題ありません。多分。)



コミット履歴の参照

常に画面の端に履歴が表示されるというのはなかなか良いものです。各ブランチの状況、タグの位置や積み上がった履歴を見ると、モチベーションが上がります。

magit を使ったワークフローとe2wm

以下、簡単な操作の流れです。

  • コードを書いて、ある程度の区切りが付いたところで magit パースペクティブに切り替え。
  • magit-status から、編集した内容を確認しながら、ファイル単位や hunk 単位で staging 。
    • n, p で移動。TABでファイル内容表示。 s でステージにあげて、 u でステージから戻す。もう複雑なコマンドを覚えなくていい!!!
  • 良ければ c でコミットログ作成。 C-c C-c でコミット、もしくは C-c C-k でキャンセル。
  • コミット後、履歴で各ブランチの状況などを確認。
  • リモートリポジトリに対して P で push 、F で pull 。



magit を使ったワークフロー

これらの作業をスムーズに行うことが出来ます。また、 magit はメニューで分かりやすく機能を提供していますので、「あんなことしたいんだけど、コマンド何だったかな〜」というようなうろ覚えでも大丈夫です。

結局 e2wm はどうでも良いので、 magit 使うと良いと思います。

導入方法

インストールですが、 auto-install 経由で以下のコードを実行するなどしてください。

(auto-install-from-url "https://github.com/kiwanami/emacs-window-manager/raw/master/e2wm-vcs.el")

magit.el は現時点の最新の ver 1.0.0 が必要です。 window-layout.el や e2wm.el 本体も最新にしておいてください。

あとは、 e2wm の設定に以下のように追加します。

(require 'e2wm-vcs)

;; M-w に magit パースペクティブ変更を割り当て
(e2wm:add-keymap
 e2wm:pst-minor-mode-keymap
 '(("M-w" . e2wm:dp-magit))
 e2wm:prefix-key)

上の設定であれば M-w で magit の画面になります。

そのうち、package.el に対応して簡単にインストールできるようにしたいなと考えています。

いろいろ

e2wm を作ってから、個人的にコーディング環境は非常に改善されたのですが、 git や subversion の操作はシェルから行っていて、ずっと問題を感じていました。Eclipse でいう Subclipse が用意しているようなパースペクティブが必要なのかなと思ってはいたのですが、なかなか実装までたどりつきませんでした。

今年になってからしばらく magit を使ってきていたのですが、気がついたらこれ無しで git が操作できない体になっていました。そこで、壮大なプラグインを作るのはやめて、 e2wm のウインドウ管理とぶつからない程度に簡単に統合する程度の対応をしてみました。もうこれで十分便利です。

名前が e2wm-vcs.el となっているとおり、 magit だけでなくて、他の VCS ツールのサポートを増やしていこうと思っています。現在は dsvn.el (psvn.elも多分可) のパースペクティブも入っていますが、Subversion の履歴の一覧は重いので、デフォルトでは表示しないようになっています。Subversionリポジトリブラウザがあると便利かなと思っていますので、そのうち必要になったら作ると思います。それ以外の VCS についても自分が必要になったら増えていくと思いますが、どなたかパッチを提供していただければ追加されると思います。

後は、プロジェクトの VCS にあわせて適切なパースペクティブに切り替えるなどの機能もあると良いのかなとか思っています。

取りあえず、今回は紹介と言うことで gdgd な感じでした。

はてなグループ::Emacs

最近、はてなグループ::Emacs部 にも書き始めました。

純粋な Emacs, Emacs Lisp ネタ、あんまりまとまってない小ネタなどを書いていくのかなと思っています。

http://vim-users.jp/vim-hacks-project/ のような感じで、盛り上がっていけばいいのかなとか勝手に思っています。