さまざまなプログラムが、特定のテキスト断片を編集するために、あなたが選択したエディターを呼び出すことができます。たとえば、バージョンコントロールシステム(Version Controlを参照してください)は、バージョンコントロールログを入力するためのエディターを呼び出し、Unixのmail
ユーティリティーは送信メッセージの入力にエディターを呼び出します。慣例により、選択するエディターは、環境変数EDITOR
で指定されます。しかしEDITOR
を‘emacs’にセットした場合、Emacsが呼び出されますが、これは便利な方法ではありません
—
なぜなら新しいEmacsプロセスが開始されるからです。なぜこれが不便かというと、新たなEmacsプロセスは、既存のEmacsプロセスのバッファー、コマンドヒストリー、その他の情報を共有しないからです。
Emacsをedit server(編集サーバー)としてセットアップして、Emacsが外部からの編集リクエストを“listen”し、それに応じて動作させることにより、この問題を解決できます。Emacsサーバーを開始するには2つの方法があります:
(server-start)
を記述して、既存のEmacsプロセスでコマンドserver-start
を実行します。既存のEmacsプロセスがサーバーになり、Emacsを終了すると、サーバーはそのEmacsプロセスとともに終了します。
server-start
を呼び出し、初期フレームを開くかわりに、呼び出した端末に制御を戻します。その後バックグラウンドで待機(wait)して、編集リクエストを待ちます(listen)。
どちらの方法も、1度Emacsサーバーを開始すると、emacsclient
というシェルコマンドを使用してEmacsに接続し、ファイルをvisitするよう指示できます。環境変数EDITOR
に‘emacsclient’をセットすれば、外部プログラムは編集のために既存のEmacsプロセスを使用できます。19
変数server-name
を使って、一意なサーバー名を与えることにより、同一マシン上で複数のEmacsサーバーを実行することができます。たとえばM-x
set-variable RET server-name RET "foo"
RETは、サーバー名を‘foo’にセットします。emacsclient
プログラムは、‘-s’オプションで、名前によりサーバーを指定できます(emacsclient Optionsを参照してください)。
複数のEmacsデーモン(Initial Optionsをい参照してください)を実行したい場合、以下のようにデーモンごとにそれぞれ、独自のサーバー名を与えることができます:
emacs --eval "(setq server-name \"foo\")" --daemon
一意なサーバー名によりサーバーを定義した場合、他のEmacsインスタンスからそのサーバーに接続し、server-eval-at
関数を使用して、そのサーバーでLisp式を評価できます。たとえば(server-eval-at
"foo" '(+ 1 2))
は、式(+ 1
2)
をサーバー‘foo’で評価して、3
を返します(そのような名前のサーバーが存在しない場合はエラーをシグナルします)。現在のところ、これは主に開発者に有用な機能です。
• Invoking emacsclient: | Emacsサーバーへの接続。 | |
• emacsclient Options: | Emacsクライアントの開始オプション。 |
別の環境変数を使うプログラムもいくつかあります。たとえば、TeXが‘emacsclient’を使うようにするには、環境変数TEXEDIT
を‘emacsclient
+%d %s’にセットします。