プロセスには対応付けられたバッファが(普通は)あります。 そのバッファはEmacsの普通のバッファであり、2つの目的に使われます。 プロセスからの出力を保存することと、 プロセスがキルされたことを判定するためです。 バッファを用いてそれを操作しているプロセスを識別することもできます。 普通は1つのバッファに1つのプロセスを対応付けるからです。 プロセスの多くの応用では、プロセスへ送る入力を編集するために バッファを使いますが、これはEmacs Lispに組み込まれたことではありません。
プロセスにフィルタ関数(see Filter Functions)がなければ、
その出力は対応付けられたバッファに挿入されます。
出力の挿入位置はprocess-mark
で決定され、
process-mark
は挿入したばかりのテキストの末尾を
指すように更新されます。
process-mark
は普通はバッファの末尾にありますが、
つねにそうであるとは限りません。
この関数は、プロセスprocessに対応付けられているバッファを返す。
(process-buffer (get-process "shell")) => #<buffer *shell*>
この関数は、プロセスprocessからの出力を挿入する箇所を指定する processのプロセスマーカを返す。
processにバッファがなければ、
process-mark
はどこも指していないマーカである。バッファにプロセス出力を挿入する際には、 挿入箇所を決定するためにこのマーカを使用し、 挿入したテキストの末尾を指すようにこのマーカを更新する。 これにより、出力の連続した塊を順に挿入できるのである。
バッファに出力を直接挿入する場合と同様に、 フィルタ関数はこのマーカを扱うべきである。
process-mark
を用いたフィルタ関数の好例は、以下の節にある。プロセスへ送るためにユーザーがプロセスバッファに 入力することが予想されるときは、 プロセスマーカは新たな入力とそれ以前の出力を区切る。
この関数は、プロセスprocessにバッファbufferを対応付ける。 bufferが
nil
であると、 プロセスに対応付けられたバッファはない。
この関数はbuffer-or-nameに対応付けられたプロセスを返す。 バッファに複数のプロセスが対応付けられている場合には、 それらの1つを選ぶ。 (現状では、もっとも最近に作られたプロセスを選ぶ。) 同じバッファに複数のプロセスを対応付けることは一般にはよくない。
(get-buffer-process "*shell*") => #<process shell>プロセスのバッファを削除すると、 サブプロセスにシグナル
SIGHUP
を送ってプロセスを削除する (see Signals to Processes)。