サブプロセスが標準出力に書く出力を受け取る方法は2つあります。 プロセスに対応付けられたバッファに出力を挿入するか、 あるいは、フィルタ関数(filter function)と呼ばれる関数を 出力に対して作用させます。 プロセスにバッファもフィルタ関数もなければ、その出力は破棄します。
サブプロセスからの出力は、Emacsが待っている、つまり、
端末入力を読んでいるとき、
sit-for
やsleep-for
を実行中のとき(see Waiting)、
accept-process-output
(see Accepting Output)を実行中のときに
だけ到着します。
これにより、並行プログラムを普通は悩ますような
タイミングエラーの問題を最小に抑えます。
たとえば、安全にプロセスを作成してから、
バッファかフィルタ関数を指定できます。
この処理の途中で待つような基本関数を呼び出さなければ、
出力は到着しません。
ファイルから読むテキストと同様に、
サブプロセスの出力は、バッファやフィルタ関数が受け取るまえに
コーディングシステムを用いて普通は復号化します。
set-process-coding-system
で
使用するコーディングシステムを指定できます
(see Process Information)。
さもなければ、coding-system-for-read
が
nil
以外であればこれを使います。
それ以外ではデフォルトの機構で決まるものを使います
(see Default Coding Systems)。
警告:
データからコーディングシステムを決定するundecided
のような
コーディングシステムは、非同期サブプロセスの出力に対しては
完全に信頼性のある動作はできない。
これは、Emacsが非同期サブプロセスの出力が
到着するたびに一塊で処理するからである。
Emacsは1つの塊から正しい変換を検出しようと試みるが、
これがつねに動作するとは限らない。
したがって、可能な限り
文字コード変換と行末変換の両方を指定したコーディングシステムを使う。
つまり、undecided
やlatin-1
などではなく、
latin-1-unix
のようなものを使う。