次: , 前: Sticky Properties, 上: Text Properties


31.19.7 テキスト属性をファイルへ保存する

つぎの2つのフックを使って、 テキスト属性を(テキストそのものとともに)ファイルに保存しておき、 ファイルを訪問したり挿入するときに同じテキスト属性を復元できます。

— 変数: write-region-annotate-functions

この変数の値は、ファイルへ書き込むテキストに対する注記の形で テキスト属性を符号化するためにwrite-regionが呼び出す関数の リストである。 see Writing to Files

リスト内の各関数は2つの引数、つまり、 書き込む領域の先頭と末尾で呼び出される。 これらの関数はバッファの内容を変更しないこと。 そのかわりに、バッファのテキストに加えてファイルに書き込むべき 注記を表すリストを返すべきである。

各関数は、(position . string)の形の要素から成る リストを返すべきである。 ここで、positionは書き込まれるテキスト内の相対位置を指定する整数、 stringはそこへ追加する注記である。

これらの関数が返す各リストは、positionの昇順になっている必要がある。 複数の関数があると、write-regionは リストを破壊的に併合して1つのソートしたリストにする。

write-regionがバッファからファイルにテキストを実際に書くときに、 指定された注記を対応する位置に混在させる。 バッファを変更せずにこれらすべてを行う。

— 変数: after-insert-file-functions

この変数は、insert-file-contentsがファイルの内容を挿入してから 呼び出す関数のリストを保持する。 これらの関数は挿入されたテキストで注記を走査し、 それらが表すテキスト属性にそれらを変換する。

各関数は1つの引数、つまり、挿入されたテキストの長さで呼ばれ、 ポイントは挿入されたテキストの先頭を表す。 関数は当該テキストで注記を走査して注記を削除し、 注記が指定するテキスト属性を作成する。 関数は、変更を反映した挿入されたテキストの更新された長さを返すこと。 関数が返した値がつぎの関数の引数になる。

これらの関数は、挿入されたテキストの先頭にポイントをつねに戻すこと。

after-insert-file-functionsの意図された用途は、 テキスト表現の注記を実際のテキスト属性に変換することである。 しかし、別の使い方も可能である。

これらのフックを使ってファイルにテキスト属性を保存したり復元する Lispプログラムを書いて、さまざまなデータ書式を試して よいものをみつけるようにお願いします。 最終的には、Emacsに取り込める良質で汎用の拡張を ユーザーが作り出すことを願っています。

テキスト属性の名前や値として任意のLispオブジェクトを 処理しないように忠告しておきます。 そのような汎用のプログラムは書くのが難しく動作が遅くなりがちです。 そのかわりに、適当に柔軟性があり符号化が難しくないデータ型の集合を選びます。

関連する機能については、See Format Conversion