Next: ハードコピーの印刷, Previous: Emacsからのシェルコマンドの実行, Up: The Emacs Editor [Contents][Index]
さまざまなプログラムが、特定のテキスト断片を編集するために、あなたが選択したエディターを呼び出すことができます。たとえば、バージョンコントロールシステム(バージョンコントロールを参照してください)は、バージョンコントロールログを入力するためのエディターを呼び出し、Unixのmail
ユーティリティーは送信メッセージの入力にエディターを呼び出します。慣例により、選択するエディターは、環境変数EDITOR
で指定されます。しかしEDITOR
を‘emacs’にセットした場合、Emacsが呼び出されますが、これは便利な方法ではありません
—
なぜなら新しいEmacsプロセスが開始されるからです。なぜこれが不便かというと、新たなEmacsプロセスは、既存のEmacsプロセスのバッファー、コマンドヒストリー、その他の情報を共有しないからです。
Emacsをedit server(編集サーバー)としてセットアップして、Emacsが外部からの編集リクエストを“listen”し、それに応じて動作させることにより、この問題を解決できます。Emacsサーバーを開始するにはさまざまな方法があります:
(server-start)
を記述して、既存のEmacsプロセスでコマンドserver-start
を実行します。既存のEmacsプロセスがサーバーになり、Emacsを終了すると、サーバーはそのEmacsプロセスとともに終了します。
server-start
を呼び出して、初期フレームを開きません。その後クライアントからの編集リクエストをwaitします。
emacsclient
を実行します。Emacsデーモンがまだ実行されていない場合に限りEmacsデーモンを開始します。
systemd
を使用する場合、提供されるsystemdユニットファイル(systemd
unit file)を使用して、ログイン時に自動的にデーモンモードのEmacsを開始できます。これをアクティブにするには:
systemctl --user enable emacs
(Emacsが標準的な場所にインストールされていない場合は、~/.config/systemd/user/のような標準的なディレクトリーにemacs.serviceをコピーする必要があるかもしれません。)
systemd
のソケット機能です。systemd
サービスはソケットを作成して、そのソケットへの接続をlistenします。emacsclient
が最初にこれに接続したとき、emacsclient
による接続のために、systemd
はEmacsサーバーを起動して、そのソケットを渡すことができます。emacsclient
が最初にこれに接続したとき、emacsclient
による接続のために、systemd
はEmacsサーバーを起動して、そのソケットを渡すことができます。この機能を使用するためのセットアップは:
~/.config/systemd/user/emacs.socket:
[Socket] ListenStream=/path/to/.emacs.socket DirectoryMode=0700 [Install] WantedBy=sockets.target
(上述のファイルemacs.serviceもインストールされていなければなりません。)
パスListenStream
は、Emacsがemacsclient
からの接続をlistenするパスです。これは、あなたが選択するファイルです。
Emacsサーバーを一度開始すると、emacsclient
というシェルコマンドを使用してEmacsに接続して、ファイルをvisitするよう指示できます。環境変数EDITOR
に‘emacsclient’をセットすれば、外部プログラムは編集のために既存のEmacsプロセスを使用できます。23
変数server-name
を使って、一意なサーバー名を与えることにより、同一マシン上で複数のEmacsサーバーを実行することができます。たとえばM-x
set-variable RET server-name RET "foo"
RETは、サーバー名を‘foo’にセットします。emacsclient
プログラムはTCPソケット使用の有無に応じて‘-s’オプション、または‘-f’オプション(emacsclient
のオプションを参照)で、名前によりサーバーを指定できます(emacsclient
のオプションを参照)。
複数のEmacsデーモン(初期化オプションを参照)を実行したい場合には、以下のようにデーモンごとにそれぞれ独自のサーバー名を与えることができます:
emacs --daemon=foo
オプションとして特定の条件が満足された際に、Emacsサーバーを自動的に停止できます。これを行うには、initファイルで以下の引数のいずれかを指定して関数server-stop-automatically
を呼び出してください(Emacs初期化ファイルを参照)。
empty
ならクライアント、ファイルをvisitしている未保存のバッファー、実行中プロセスがすべて無くなるとサーバーは停止します。
delete-frame
なら、最後のクライアントフレームが閉じられる際にファイルをvisitしている未保存のバッファーを保存するか、終了していないプロセスそれぞれについて停止してよいか尋ねて、問題なければサーバーを停止します。
kill-terminal
なら、C-x C-c
(save-buffers-kill-terminal
)で最後のクライアントフレームが閉じられる際にファイルをvisitしている未保存のバッファーを保存するか、終了していないプロセスそれぞれについて停止してよいか尋ねて、問題なければサーバーを停止します。
一意なサーバー名によりサーバーを定義した場合、他のEmacsインスタンスからそのサーバーに接続し、server-eval-at
関数を使用して、そのサーバーでLisp式を評価できます。たとえば(server-eval-at
"foo" '(+ 1 2))
は、式(+ 1
2)
をサーバー‘foo’で評価して、3
を返します(そのような名前のサーバーが存在しない場合はエラーをシグナルします)。現在のところ、これは主に開発者に有用な機能です。
オペレーティングシステムのデスクトップ環境がfreedesktop.org-compatible
(これはほとんどのGNU/Linuxやその他の最近のUnix風GUIが該当する)なら、emacsclient
でEmacsサーバーに接続するために‘Emacs
(Client)’メニューエントリーを使用できます。デーモンがすでに実行中でなければ開始されます。
別の環境変数を使うプログラムもいくつかあります。たとえば、TeXが‘emacsclient’を使うようにするには、環境変数TEXEDIT
を‘emacsclient
+%d %s’にセットします。