Пакет Ewoc формирует текст буфера, который представляет структуру объектов Lisp, и обновляет текст при изменениях в этой структуре. Это подобно компоненту «представление» в парадигме проектирования «модель–представление–контроллер». Ewoc означает «Виджет Emacs для коллекций объектов».
Ewoc — это структура, которая организует информацию, необходимую для построения текста буфера, представляющего определённые данные Lisp. Текст буфера ewoc состоит из трёх частей: сначала фиксированный заголовок; затем текстовые описания серии элементов данных (объектов Lisp, которые вы указываете); и наконец, фиксированный подвал. В частности, ewoc содержит информацию о:
Обычно вы определяете ewoc с помощью ewoc-create, а затем передаёте
полученную структуру ewoc другим функциям пакета Ewoc для
создания в ней узлов и отображения в буфере. После того как она
отображена в буфере, другие функции определяют соответствие
между позициями в буфере и узлами, перемещают точку от текстового
представления одного узла к другому и так далее. См. Функции абстрактного отображения.
Узел инкапсулирует элемент данных подобно тому, как переменная хранит значение. Обычно инкапсуляция происходит как часть добавления узла в ewoc. Вы можете извлечь значение элемента данных и поместить новое значение на его место, например:
(ewoc-data узел) ⇒ значение (ewoc-set-data узел новое-значение) ⇒ новое-значение
Вы также можете использовать в качестве элемента данных объект Lisp (список или вектор), который является контейнером для реального значения, или индекс в некоторую другую структуру. В примере (см. Пример абстрактного отображения) используется последний подход.
Когда данные изменяются, вы захотите обновить текст в буфере.
Вы можете обновить все узлы, вызвав ewoc-refresh,
или только определённые узлы с помощью ewoc-invalidate,
или все узлы, удовлетворяющие предикату, с помощью ewoc-map.
Кроме того, вы можете удалить недействительные узлы с помощью ewoc-delete
или ewoc-filter и добавить новые узлы на их место.
Удаление узла из ewoc также удаляет связанное с ним текстовое описание из буфера.