Next: プロセスのフィルター関数, Up: プロセスからの出力の受信 [Contents][Index]
プロセスは関連付けられたバッファー(associated buffer)をもつことができます(通常はもつ)。これは普通のEmacsバッファーであり、2つの目的のために使用されます。1つはプロセスからの出力の格納、もう1つはプロセスをkillする時期を判断するためです。通常の習慣では任意の与えられたバッファーにたいして関連付けられるプロセスは1つだけなので、処理対象のプロセスを識別するためにそのバッファーを使用することもできます。プロセス使用の多くはプロセスに送信する入力を編集するためにもこのバッファーを使用しますが、これはEmacs Lispの組み込みではありません。
デフォルトでは、プロセスの出力は関連付けられたバッファーに挿入されます(カスタムフィルター関数の定義により変更可能。プロセスのフィルター関数を参照)。出力を挿入する位置はprocess-mark
により決定されます。これは正に挿入されたテキストの終端にポイントを更新します。通常(常にではない)はprocess-mark
はバッファーの終端になります。
プロセスに関連付けられたバッファーをkillすることによりプロセスもkillされます。そのプロセスのprocess-query-on-exit-flag
が非nil
なら、Emacsはまず確認を求めます(exit前の問い合わせを参照)。この確認は関数process-kill-buffer-query-function
により行われて、これはkill-buffer-query-functions
から実行されます(バッファーのkillを参照)。
この関数は指定されたprocessの関連付けられたバッファーをリターンする。
(process-buffer (get-process "shell")) ⇒ #<buffer *shell*>
この関数はprocessにたいするプロセスマーカーをリターンする。これはプロセスからの出力をどこに挿入するかを示すマーカー。
processがバッファーをもたなければ、process-mark
は存在しない場所を指すマーカーをリターンする。
デフォルトのフィルター関数はプロセス出力の挿入場所の決定にこのマーカーを使用して、挿入したテキストの後にポイントを更新する。連続するバッチ出力が連続して挿入されるのはこれが理由。
カスタムフィルター関数はこのマーカーを通常は同じ方式で使用すること。process-mark
を使用するフィルター関数の例はProcess Filter Exampleを参照のこと。
ユーザーにプロセスバッファー内でプロセスに送信するための入力を期待する際には、プロセスマーカーは以前の出力から新たな入力を区別する。
この関数はprocessに関連付けられたバッファーにbufferをセットする。bufferがnil
ならプロセスはバッファーに関連付けられない。非nil
かつプロセスに関連付けられているバッファーと異なる場合には、bufferの終端ポイントにプロセスマークがセットされる(プロセスマークがすでにbufferに関連付けられている場合を除く)。
この関数はbuffer-or-nameで指定されるバッファーに関連付けられた、削除されていないプロセスをリターンする。そのバッファーに複数のプロセスが関連付けられている場合には、この関数はいずれか1つ(現在のところもっとも最近作成されたプロセスだがこれを期待しないこと)を選択する。プロセスの削除(delete-process
を参照)により、そのプロセスはこの関数がリターンするプロセスとしては不適格となる。
同一のバッファーに複数のプロセスを関連付けるのは、通常は悪いアイデアである。
(get-buffer-process "*shell*") ⇒ #<process shell>
プロセスのバッファーをkillすることにより、SIGHUP
シグナルでサブプロセスをkillしてプロセスを削除する(プロセスへのシグナルの送信を参照)。
プロセスのバッファーがウィンドウに表示されている場合には、プロセスが出力をスクリーンのサイズに適応させるのと同様に、Lispプログラムでウィンドウのサイズにプロセス出力を適応させるようにプロセスに指示したいと思うでしょう。以下の関数によりプロセスにたいしてこの種の情報をやり取りできます。しかしすべてのシステムが基礎となる機能をサポートする訳ではないので、コマンドライン引数や環境変数を通じたフォールバックを提供するのが最良です。
processにたいして、その論理ウィンドウサイズが文字単位でwidthとheightのサイズであることを告げる。関数がこの情報をプロセスとやり取りすることに成功したらt
、それ以外はnil
をリターンする。
プロセスに関連付けられたバッファーを表示するウィンドウがサイズを変更された際には、影響を受けるプロセスはその変更にたいして通知される必要があります。デフォルトではウィンドウ構成(window
configuration)が変更されると、ウィンドウにバッファーが表示されている各プロセスにかわり、プロセスのバッファーを表示するすべてのウィンドウのうち最小のサイズのウィンドウを引数として、Emacsが自動的にset-process-window-size
を呼び出します。これはバッファーが少なくとも1つのウィンドウに表示されているプセスそれぞれにたいして、変数window-adjust-process-window-size-function
の値である関数を呼び出すように指定するwindow-configuration-change-hook
(ウィンドウのスクロールと変更のためのフックを参照)を通じて機能します。この変数をセットすることにより、この振る舞いをカスマイズできます。
この変数の値はプロセスとプロセスのバッファーを表示するウィンドウのリストという2つの引数を受け取る関数であること。その関数が呼び出される際には、そのプロセスのバッファーがカレントバッファーとなる。関数はset-process-window-size
の呼び出しを通じて渡される論理プロセスウィンドウ(logical
process window)を記述するコンスセル(width . height)
をリターンすること。関数はnil
をリターンすることもでき、Emacsはこの場合にはそのプロセスにたいしてset-process-window-size
を呼び出さない。
この変数にたいしてEmacsは2つの事前定義された値を提供する。1つはwindow-adjust-process-window-size-smallest
であり、これはプロセスのバッファーを表示するウィンドウのすべてのサイズから最小のサイズもう1つのwindow-adjust-process-window-size-largest
は最大のサイズをリターンする。より複雑な方式には独自の関数を記述すること。
この変数はバッファーローカルにできる。
プロセスがadjust-window-size-function
プロパティ(プロセスの情報を参照)をもつ場合には、その値はwindow-adjust-process-window-size-function
のグローバル値とバッファーロール値をオーバーライドします。