以下の関数を使用して、あるバッファーのテキストを他のバッファーのテキストで置き換えることができます:
この関数はバファーsourceのアクセス可能範囲でカレントバッファーのアクセス可能範囲を置き換える。sourceはバッファーオブジェクトかバッファー名のいずれか。replace-buffer-contents
が成功するとカレントバッファーのアクセス可能範囲のテキストは、バッファーsourceのアクセス可能範囲のテキストと等しくなる。
この関数はバファーsourceのアクセス可能範囲でカこの関数はカレントバッファーのポイント、マーカー、テキストプロパティ、オーバーレイをそのまま維持しようと試みる。この挙動が好都合であるような潜在的なケースは外部コードをフォーマットするプログラムだろう。これらは通常は再フォーマットしたテキストを一時的なバッファーかファイルに書き込んで、delete-region
やinsert-buffer-substring
を使用することによりそれらのプロパティを削除する。しかし後者の組み合わせのほうが通常は高速である(テキストの削除とテキストの挿入を参照)。
これが機能するためには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
をリターンする。
この関数は与えられたreplace-fnを使用して、begとendの間のリージョンを置換する。関数replace-fnはカレントバッファーを指定されたリージョンにナローして実行される。リージョンを置換する文字列またはバッファーのいずれかをリターンすること。
置換は上述のreplace-buffer-contents
(引数max-secs、max-costs、リターン値についても記述あり)を使用して行われる。
注意:
置換物が文字列なら一時バッファーに配置されるのでreplace-buffer-contents
が処理することができる。したがってすでにバッファーに置換物がある場合には、buffer-substring
の類を使用して文字列に変換することは無意味である。