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


37.19 抽象的なディスプレー

Ewocパッケージは、Lispオブジェクトの構造を表すバッファーテキストを構成し、その構造体の変更にしたがってテキストを更新します。これはデザインパラダイム“model/view/controller”内の、“view”コンポーネントと似ています。Ewocは、“Emacs’s Widget for Object Collections(オブジェクトコレクション用Emacsウィジェット)”を意味します。

ewocは特定のLispデータを表現するバッファーテキストの構築に要される情報を組織化します。ewocのバッファーテキストは順番に、まず固定されたheaderテキスト、次に一連のデータ要素のテキスト記述(あなたが指定するLispオブジェクト)、最後に固定されたfooterテキストという3つのパートをもっています。具体的にはewocは以下の情報を含んでいます:

通常はewoc-createによりewocを定義して、その結果のewoc構造体内にノードを構築するためにEwocパッケージ内の別の関数に渡してバッファー内に表示します。バッファー内でこれが一度表示されれば、他の関数はバッファー位置とノードの対応を判断したり、あるノードのテキスト表現から別のノードのテキスト表現への移動等を行います。Abstract Display Functionsを参照してください。

ノードは変数が値を保持するのと同じ方法でデータ要素をカプセル化(encapsulate)します。カプセル化は通常はewocへのノード追加の一部として発生します。以下のようにデータ要素値を取得して、その場所に新たな値を配置することができます:

(ewoc-data node)
⇒ value

(ewoc-set-data node new-value)
⇒ new-value

データ要素値として、“実際”の値のコンテナーであるようなLispオブジェクト(リストまたはベクター)、または他の構造体へのインデックスも使用できます。例(Abstract Display Exampleを参照)では、後者のアプローチを使用しています。

データが変更された際にはバッファー内のテキストを更新したいでしょう。ewoc-refresh呼び出しにより全ノード、ewoc-invalidateを使用して特定のノード、またはewoc-mapを使用して述語を満足するすべてのノードを更新できます。あるいはewoc-deleteを使用して無効なノードを削除したり、その場所に新たなノードを追加できます。ewocからのノード削除はバッファーからそれに関連付けられたテキスト記述も同様に削除します。