同期プロセスは、以下に述べる 2種類の関数で作られます。同期というのは Emacs が (先に進む前に) そのプロセスの終了を待つことを意味します。
Function: call-process program &optional infile buffer-name display &rest args
この関数は、別プロセスとして program を呼び、その終了を待ちます。 nil を返 します。
このプロセスの標準入力は、 infile が nil でない場合 infile から来て、 nil の場合 /dev/null から来ます。このプロセスの出力を、 buffer-name がバッファ 名である場合、 (その)バッファのポイントの前に挿入し、 t の場合カレントバッ ファを用い、 nil の場合、その出力を捨てます。 0 の場合、出力を捨て call- process はすぐ戻ります。
display が non-nil の場合、call-process は (出力がバッファに挿入されるごと に)バッファの(再)表示を行ないます。そうでない場合、このコマンドが完全に終 了するまで(バッファに)出力を見ることはできません。
この関数は、 program が終了するのを待ちます。アボートした場合(e.g., C-g を タイプすることで)このプロセスを kill します。
以下の例は(全て)バッファ foo から起動されています。
(call-process "pwd" nil t) => nil
---------- Buffer: foo ---------- /usr/user/lewis/manual ---------- Buffer: foo ----------
(call-process "grep" nil "bar" nil "lewis" "/etc/passwd") => nil
---------- Buffer: bar ---------- lewis:5LTsHm66CSWKg:398:21:Bil Lewis:/user/lewis:/bin/csh
---------- Buffer: bar ----------
Function: call-process-region start end program &optional delete buffer-name display &rest arguments
この関数は、 start と end の間のテキストを標準入力として、 program を走ら せているプロセスに送ります。 delete が non-nil の場合、これはテキストを削 除します。
buffer-name がバッファ名である場合、この出力をそこに入れ、 buffer-name が t の場合、出力をカレントバッファに入れます。 buffer が nil の場合、この出 力を捨てます。
display が non-nil の場合、call-process-region は (出力が挿入されるごとに) バッファの再表示を行ないます。そうでない場合、このコマンドが完全に終了する まで(バッファに)出力を見ることはできません。
この関数は、(通常) program が終了するのを待ちます。クィットした場合(e.g., C-g をタイプすることで)このプロセスを kill します。
以下に示す最初の例において、バッファの次の 5 文字 (input) を標準入力として unix プログラム cat が呼ばれます。 cat はこの標準入力を標準出力にコピーし ます。これは、それをこのバッファに挿入します。 nil を返します。
(call-process-region 5 10 "cat" nil t) => nil ---------- Buffer: foo ---------- input ---------- Buffer: foo ----------