emacs daemonの設定メモ

ちょっと設定を見直したのでそのときのメモです。


拡張をいろいろ追加すると起動に時間がかかるというemacsの欠点を補う方法として、emacs --daemonというものがある。これは要するにemacsをデーモンとしてバックグラウンドで起動しっぱなしにしておき、使いたいときには手元の端末やXのウィンドウでクライアントを立ち上げてデーモンに接続するだけ、というもの。いちいち初期化しないので本当に一瞬で起動できます。


で、何らかのタイミング(マシン起動時とかログイン時とか)であらかじめデーモンを立ち上げておく必要があるのですが、普段デスクトップとして使っているマシン*以外*では、初回使用時にデーモンがいなければ起動するようにして使っています*1


やり方としては、下記のスクリプトを"E"という名前でパスの通ったディレクトリにおいておきます。
ファイルを編集するときは "E ファイルパス" を実行すれば、デーモンが未起動の場合は起動した上で、クライアントが起動します。
ついでに"export EDITOR=E"しておくと、gitのコミットログを書くときとか、lessでファイルを見ていてvで編集開始したときとか、そういうときもemacsが一瞬で起動できます。

#!/bin/sh
if emacsclient -t "$@" ; then
  :
else
  emacs --daemon
  exec emacsclient -t "$@"
fi
追記

こんなスクリプトを使わなくとも、全く同じことをする emacsclient -a "" というオプションがあるのでこれを使って

alias E="emacsclient -t -a ''"

としておけば良かったようです。


ちなみに.emacsを編集したときなどにデーモンを終了したいときは

emacsclient -e '(kill-emacs)'

を実行します。


おまけ。編集したファイルのカーソルの位置を記憶して、次回開いたときに移動してくれる saveplace という拡張を使っていますが、これをdaemonと組み合わせると、デーモンが正常終了しなかった場合に位置が保存されないという問題があるので、下記のようにして10分に1回、位置を保存させています。

(require 'saveplace)
(setq-default save-place t)
(run-at-time 600 600 'save-place-kill-emacs-hook)

*1:デスクトップでは、ログインしたときにemacs --daemonを実行するよう、gnome-session-propertyで設定してあります