emacsclientを使おう

性なる夜にこんばんわ。
今彼女と過ごしているいるって人は末永く爆発してくださいね。


それはさておき、Emacs Advent Calendar JP 2010 の 25日目の記事です。
昨日 24日目は ki_nuさんの「アウトライン副モードのことなど」でした。
私なんかがトリで大変恐縮ですが、書かせていただきます。


私が紹介するのは emacsclientです。既に知っている人も多いかと思います。
日常的に利用して欲しいというよりは、バージョン管理ツールを使っている
Emacsユーザにはぜひ使ってほしいという感じですかね。

利点

利点はなんといっても起動が早くなることです。たくさんのカスタマイズを
行い種々の Elispsを読み込む場合、起動がどうしても遅くなります。
起動が遅いからちょろっと使いたいときは '-q'オプションをつけて起動
している方もいるかと思いますが、やっぱり慣れ親しんだ設定で Emacs
使いたいですよね。
そんなときにうってつけなのが emacsclientなわけです。

注意

emacsclientを使うにあたりの注意ですが、emacsと emacsclientは同じバージョンを
使って下さい。同じものを使うのが無難であり、エラーが少ないと思います。
Ubuntuとか Debianを長い間使っている場合、emacs22、emacs23、
emacs-snapshotが同居しているなんて場合がありますので特に注意してください。
もし複数Emacsがある場合はバージョンが付属した実行ファイルを指定するとか、
update-alternativesを使ってバージョンを統一するなどしてください。

設定

以下の設定を .emacsに加えます。ちゃんと確認してませんが、Emacs22以降なら
動作すると思います。

; server start for emacs-client
(require 'server)
(unless (server-running-p)
  (server-start))

server-running-pは既に server-startが実行されているかを確認します。
これにより, 一番初めに立ち上げた Emacsでサーバが起動することになります。
サーバが立ち上がらないなどうまく起動しない場合は、server-startを再度
実行してみてください。サーバの再起動が行われます。


Emacs23.1以降では daemon機能もあるのでそちらを利用してもよいかと思います。
こちらの場合は上記の設定は書かずに、はじめに Emacsの起動を以下のように
行います。

  % emacs --daemon

これで Emacsをデーモンとして起動できます。ただ私は daemonは使いません。
私は Emacsを色反転して起動(--reverseオプション)するのですが、daemonだと
色の設定方法がよくわからないためです。なんで server-startでサーバを
起動しています。

使う

これで emacsclientが利用できるようになりました。
主な使い方は以下のとおりです。

  % emacsclient ファイル名

これで次の画像のようになります。

このとき端末は編集の終了を待ちます。編集が終了したら 'C-x #'で
終了を通知することができます。


よく使う(と思われる)オプションは以下のとおりです。
私は -nオプション以外はほとんど使いません。

オプション 意味
-n,--no-wait 終了を待たない。C-x #等をする必要がない
-nw,-t,-tty 現在の端末にファイルを開く(CUI)
-c,--create-frame 新しいフレームでファイルを開く(GUI)

'-nw', '-c'で起動する場合は終了コマンドが 'C-x #'でなく
'C-x 5 0'になるので注意してください。よく使うというものが
あればすぐにタイプできるように aliasを作っておくとよいでしょう。

バージョン管理で emacsclientを使う

ここからが紹介したいことなのですが、最近だとバージョン管理を使わないって
ことの方が少なくなってきました。そこで質問なのですが、皆さんはちゃんと
コミットログを書いているでしょうか? '-m'オプションでちょろって書いているだけ
ではないでしょうか?本当にちょろっとで済むならいいんですけど、大事な更新も
それで済ましていていませんか?うちの会社ではそういう人が多いです。


詳しい理由は知らないですが、エディタを開いて書いていないので
エディタが立ち上がる時間がうざいとかそういうことなんでしょう。


'-m'オプションを使ってしまうとやっぱり 'add hoge.txt'とか 'modify hoge.txt'とかどうでもいいようなコミットログが多いんですよね。
そんなの logコマンドで分かるじゃんっていうレベルのやつ。


なんでログをきっちり書くためにはちゃんとエディタを開く必要があります。
そこで emacsclientを使いましょう。これで起動時間のストレスを感じることなく
コミットログを書くことができます。

エディタの設定

gitであれば 'git config core.editor emacsclient'とします。
Macユーザで Cocoa EmacsCarbon Emacsを使っている場合はフルパスを指定して
ください。.gitconfigが以下のようにしてください。

[core]
        editor=/Applications/Emacs.app/Contents/MacOS/bin/emacsclient

Subversionでは環境変数 SVN_EDITORの値を emacsclientに設定してください。

commitする

commitコマンドで '-m'オプションをつけなければエディタが起動します。


gitを使っている場合は commitするとき
'-v'オプションをつけることを激しくおすすめします。変更の差分がエディタに
一緒に渡されるのでどこを修正したかがわかるので、ログも書きやすくなります。

イメージはこんな具合です。


これでコミットログをきっちり書くことができますね。
めでたしめでたし。


ちょっと長くとなってしまいましたが、
以上です。

最後に

一応最後ということなので感想を書きます。

私は今までこういうことには参加したことなく、 あんまり公のためって
考えたことないですが、 今回のことはとてもいい経験になったと思います。


このような機会を与えてくれた Emacs Advent Calendar JP 2010の企画者 @さん,
記事を書いてくださって皆さんに感謝します。(最近まで納品がかなり忙しくてほとんど
記事が読めてないですが、無事に終わったのでこれから読ませていただきます。)


来年参加できるか定かではないですが、いいネタ書けるように
勉強していきたいと思います。


皆さんありがとうございました。参加者のみなさんお疲れさまでした。