Emacs (snapshot) の起動プログラム

Emacsを起動する場合、通常はコマンドラインから emacs と叩いたりアプリケーションメニューから選んだりというようなことをしますが、本音をいうと以下のようなことを考慮しながら都合よく振る舞いたいものです。

  1. Emacsは基本1つしか立ち上げず、ファイル編集を行う際には全て起動済みの Emacs を使う。ターミナルからファイルを指定しての編集をするのも同様。
  2. Emacsが既に立ち上げっているかどうかなどは考慮する必要はないようにする。

前者の方は、やはり Emacs の起動は若干時間がかかるし、新しいEmacs のウィンドウが2個も3個も立ち上がっているのは格好悪いので、やはり1つ立ち上げておいた Emacs で編集が全て行えるように。
後者の方は、前者の話をクリアする際にあわせて、事前に emacs を立ち上げておいて〜ということはないように。

このような振る舞いを行う機構としては、emacsclient というものを利用すればOKで、まあ結局のところ、EmacsWiki の emacsclient ページがすべてなのですが、snapshot (emacs23) 向けならばこうするようにと書いているとおり、次のような感じのスクリプトをこしらえておきます。

#!/bin/sh

emacs='emacs-snapshot'
emacsclient='emacsclient.emacs-snapshot'
tempuid=`id -u`

if [ ! -e "/tmp/emacs$tempuid/server" ]
then
    $emacs &
    while [ ! -e "/tmp/emacs$tempuid/server" ] ; do sleep 1 ; done
fi

$emacsclient "$@"

あとは全ての emacs 起動 (コマンドライン、ランチャ等) はこのスクリプトを使って行うようにすればOKです。

一方 .emacs には emacsclient からの情報が受け取れるよう、次のような設定を準備しときます。先頭の方で書いておけばよいです。

(server-start)

なお、Elscreenを使っている環境であれば、次のような設定をあわせて書いておくことで emascclient で指定したファイルが新しい window でオープンされるようになります。

(require 'elscreen-server)