Next: , Previous: Output from Processes, Up: Output from Processes


36.9.1 プロセスバッファ

プロセスには対応付けられたバッファが(普通は)あります。 そのバッファはEmacsの普通のバッファであり、2つの目的に使われます。 プロセスからの出力を保存することと、 プロセスがキルされたことを判定するためです。 バッファを用いてそれを操作しているプロセスを識別することもできます。 普通は1つのバッファに1つのプロセスを対応付けるからです。 プロセスの多くの応用では、プロセスへ送る入力を編集するために バッファを使いますが、これはEmacs Lispに組み込まれたことではありません。

プロセスにフィルタ関数(see Filter Functions)がなければ、 その出力は対応付けられたバッファに挿入されます。 出力の挿入位置はprocess-markで決定され、 process-markは挿入したばかりのテキストの末尾を 指すように更新されます。 process-markは普通はバッファの末尾にありますが、 つねにそうであるとは限りません。

— Function: process-buffer process

この関数は、プロセスprocessに対応付けられているバッファを返す。

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

この関数は、プロセスprocessからの出力を挿入する箇所を指定する processのプロセスマーカを返す。

processにバッファがなければ、 process-markはどこも指していないマーカである。

バッファにプロセス出力を挿入する際には、 挿入箇所を決定するためにこのマーカを使用し、 挿入したテキストの末尾を指すようにこのマーカを更新する。 これにより、出力の連続した塊を順に挿入できるのである。

バッファに出力を直接挿入する場合と同様に、 フィルタ関数はこのマーカを扱うべきである。 process-markを用いたフィルタ関数の好例は、以下の節にある。

プロセスへ送るためにユーザーがプロセスバッファに 入力することが予想されるときは、 プロセスマーカは新たな入力とそれ以前の出力を区切る。

— Function: set-process-buffer process buffer

この関数は、プロセスprocessにバッファbufferを対応付ける。 buffernilであると、 プロセスに対応付けられたバッファはない。

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

この関数はbuffer-or-nameに対応付けられたプロセスを返す。 バッファに複数のプロセスが対応付けられている場合には、 それらの1つを選ぶ。 (現状では、もっとも最近に作られたプロセスを選ぶ。) 同じバッファに複数のプロセスを対応付けることは一般にはよくない。

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

プロセスのバッファを削除すると、 サブプロセスにシグナルSIGHUPを送ってプロセスを削除する (see Signals to Processes)。