Next: , Up: Output from Processes   [Contents][Index]


36.9.1 プロセスのバッファー

プロセスは関連付けられたバッファー(associated buffer)をもつことができます(通常はもつ)。これは普通のEmacsバッファーであり、2つの目的のために使用されます。1つはプロセスからの出力の格納、もう1つはプロセスをkillする時期を判断するためです。通常の習慣では任意の与えられたバッファーにたいして関連付けられるプロセスは1つだけなので、処理対象のプロセスを識別するためにそのバッファーを使用することもできます。プロセス使用の多くはプロセスに送信する入力を編集するためにもこのバッファーを使用しますが、これはEmacs Lispの組み込みではありません。

デフォルトでは、プロセスの出力は関連付けられたバッファーに挿入されます(カスタムフィルター関数の定義により変更可能。Filter Functionsを参照)。出力を挿入する位置はprocess-markにより決定されます。これは正に挿入されたテキストの終端にポイントを更新します。通常(常にではない)はprocess-markはバッファーの終端になります。

プロセスに関連付けられたバッファーをkillすることによりプロセスもkillされます。そのプロセスのprocess-query-on-exit-flagが非nilなら、Emacsはまず確認を求めます(Query Before Exitを参照)。この確認は関数process-kill-buffer-query-functionにより行われて、これはkill-buffer-query-functionsから実行されます(Killing Buffersを参照)。

Function: process-buffer process

この関数は、プロセスprocessの関連付けられたバッファーをリターンする。

(process-buffer (get-process "shell"))
     ⇒ #<buffer *shell*>
Function: process-mark process

この関数はprocessにたいするプロセスマーカーをリターンする。これはプロセスからの出力をどこに挿入するかを示すマーカー。

processがバッファーをもたなければ、process-markは存在しない場所を指すマーカーをリターンする。

デフォルトのフィルター関数はプロセス出力の挿入場所の決定にこのマーカーを使用して、挿入したテキストの後にポイントを更新する。連続するバッチ出力が連続して挿入されるのはこれが理由。

カスタムフィルター関数はこのマーカーを通常は同じ方式で使用すること。process-markを使用するフィルター関数の例はProcess Filter Exampleを参照のこと。

ユーザーにプロセスバッファー内でプロセスに送信するための入力を期待する際には、プロセスマーカーは以前の出力から新たな入力を区別する。

Function: set-process-buffer process buffer

この関数はprocessに関連付けられたバッファーにbufferをセットする。buffernilならプロセスはバッファーに関連付けられない。

Function: get-buffer-process buffer-or-name

この関数はbuffer-or-nameで指定されるバッファーに関連付けられた、削除されていないプロセスをリターンする。そのバッファーに複数のプロセスが関連付けられている場合には、この関数はいずれか1つ(現在のところもっとも最近作成されたプロセスだがこれを期待しないこと)を選択する。プロセスの削除(delete-processを参照)により、そのプロセスはこの関数がリターンするプロセスとしては不適格となる。

同一のバッファーに複数のプロセスを関連付けるのは、通常は悪いアイデアである。

(get-buffer-process "*shell*")
     ⇒ #<process shell>

プロセスのバッファーをkillすることにより、SIGHUPシグナルでサブプロセスをkillしてプロセスを削除する(Signals to Processesを参照)。