Next: , Previous: , Up: Text   [Contents][Index]


33.23 バッファーテキストの置換

以下の関数を使用して、あるバッファーのテキストを他のバッファーのテキストで置き換えることができます:

Command: replace-buffer-contents source &optional max-secs max-costs

この関数はバファーsourceのアクセス可能範囲でカレントバッファーのアクセス可能範囲を置き換える。sourceはバッファーオブジェクトかバッファー名のいずれか。replace-buffer-contentsが成功するとカレントバッファーのアクセス可能範囲のテキストは、バッファーsourceのアクセス可能範囲のテキストと等しくなる。

この関数はバファーsourceのアクセス可能範囲でカこの関数はカレントバッファーのポイント、マーカー、テキストプロパティ、オーバーレイをそのまま維持しようと試みる。この挙動が好都合であるような潜在的なケースは外部コードをフォーマットするプログラムだろう。これらは通常は再フォーマットしたテキストを一時的なバッファーかファイルに書き込んで、delete-regioninsert-buffer-substringを使用することによりそれらのプロパティを削除する。しかし後者の組み合わせのほうが通常は高速である(DeletionInsertionを参照)。

これが機能するためにはreplace-buffer-contentsが元バッファーとsourceのコンテンツを比較する必要があり、これはバッファーが巨大で多数の差異が存在する場合にはコストがかかる処理となる。replace-buffer-contentsの実行時間を制限するために、2つのオプション引数がある。

max-secsは秒単位のハードリミットを定義する。これが与えられて超過した場合には、delete-regionおよびinsert-buffer-substringにフォールバックする。

max-costsは差分計算の品質を定義する。このリミットを実際のコストが超過したら、次善だがより高速な発見的手法を使用する。デフォルト値は1000000。

replace-buffer-contentsは非破壊的な置換ができればtをリターンする。それ以外の場合にはmax-secsを超過したらnilをリターンする。

Function: replace-region-contents beg end replace-fn &optional max-secs max-costs

この関数は与えられたreplace-fnを使用して、begendの間のリージョンを置換する。関数replace-fnはカレントバッファーを指定されたリージョンにナローして実行される。リージョンを置換する文字列またはバッファーのいずれかをリターンすること。

置換は上述のreplace-buffer-contents (引数max-secsmax-costs、リターン値についても記述あり)を使用して行われる。

注意: 置換物が文字列なら一時バッファーに配置されるのでreplace-buffer-contentsが処理することができる。したがってすでにバッファーに置換物がある場合には、buffer-substringの類を使用して文字列に変換することは無意味である。