プロセスには関連バッファを持たせることができ(通常は持たせています)、これはプロセスからの出力の保存と、プロセスを終了させるタイミングの判断という2つの目的で使用される通常のEmacsバッファです。また、通常はあるバッファに関連付けられるプロセスは1つだけであるため、このバッファを用いて操作対象のプロセスを特定することもできます。プロセスを利用する多くのアプリケーションでは、プロセスに送信する入力を編集するためにもこのバッファを使用しますが、これはEmacs Lispに組み込まれている機能ではありません。
デフォルトでは、プロセスの出力は対応するバッファに挿入されます。(カスタムフィルタ関数を定義することでこれを変更できます。詳細はプロセスフィルタ関数を参照してください。)出力の挿入位置はprocess-markによって決定され、その後、挿入されたばかりのテキストの末尾を指すように更新されます。通常(ただし常にではありません)、process-markはバッファの末尾に位置します。
プロセスに関連付けられたバッファをキルすると、そのプロセスもキルされます。プロセスのprocess-query-on-exit-flagがnilでない場合、Emacsはまず確認を求めます(終了前の問い合わせを参照)。この確認は関数process-kill-buffer-query-functionによって行われ、kill-buffer-query-functionsから実行されます(バッファのキルを参照)。
この関数は、指定された 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>
プロセスのバッファをキルするとプロセスが終了し、SIGHUP
シグナルによってサブプロセスがキルされます(プロセスへのシグナル送信を参照)。
プロセスのバッファがウィンドウに表示される場合、Lispプログラムはプロセスにそのウィンドウの寸法を伝え、プロセスが画面の寸法に合わせて出力を調整するのと同様に、出力をその寸法に適応させたいと考えることがあります。以下の関数を使用すると、このような情報をプロセスに伝えることができます。ただし、すべてのシステムが基盤となる機能をサポートしているわけではないため、コマンドライン引数や環境変数などを介してフォールバックを用意しておくのが最善です。
process に対し、その論理ウィンドウサイズが文字単位で width × height
であることを通知する。この関数がこの情報をプロセスに伝達できた場合は t を、そうでない場合は
nil を返す。
When windows that display buffers associated with process change their
dimensions, the affected processes should be told about these changes. By
default, when the window configuration changes, Emacs will automatically
call set-process-window-size on behalf of every
process whose buffer is displayed in a window, passing it the smallest
dimensions of all the windows displaying the process’s buffer. This
works via window-configuration-change-hook (see Hooks for Window Scrolling and
Changes), which is told to invoke the function that is the value of the
variable window-adjust-process-window-size-function for each
process whose buffer is displayed in at least one window. You can customize
this behavior by setting the value of that variable.
この変数の値は、プロセスと、そのプロセスのバッファを表示しているウィンドウのリストという2つの引数をとる関数である必要があります。関数が呼び出される際、プロセスのバッファは現在のバッファとなります。この関数は、set-process-window-size
の呼び出しを通じて渡される論理プロセスウィンドウの寸法を表すコンスセル (width . height)
を返す必要があります。また、関数は nil を返すこともでき、その場合 Emacs
はこのプロセスに対して set-process-window-size を呼び出しません。
Emacsでは、この変数に対して2つの定義済み値が用意されています。プロセスのバッファを表示しているウィンドウの全次元のうち最小値を返すwindow-adjust-process-window-size-smallestと、最大値を返すwindow-adjust-process-window-size-largestです。より複雑な戦略が必要な場合は、独自の関数を記述してください。
この変数はバッファローカルになり得ます。
プロセスが adjust-window-size-function プロパティ(プロセス情報 を参照)を持つ場合、その値は
window-adjust-process-window-size-function
のグローバル値およびバッファローカル値を上書きします。