Абстрактный вывод
Пакет Ewoc создает буферный текст, представляющий структуру объектов Lisp, и обновляет текст, чтобы следовать изменениям в этой структуре. Это похоже на компонент «представление» в парадигме проектирования «модель-представление-контроллер». Ewoc означает «Виджет Emacs для коллекций объектов».
ewoc — это структура, которая организует информацию, необходимую для построения буферного текста, представляющего определенные данные Lisp. Буферный текст ewoc состоит из трех частей: сначала фиксированный текст заголовка; затем текстовые описания ряда элементов данных (объектов Lisp, которые вы указываете); и, наконец, фиксированный текст футера. В частности, ewoc содержит информацию о:
- Буфере, в котором генерируется его текст.
- Начальной позиции текста в буфере.
- Строках заголовка и футера.
- Двойной связанный список узлов, каждый из которых содержит:
- Элемент данных, единственный объект Lisp.
- Связи с предыдущим и последующим узлами в списке.
- Функцию красивого вывода, которая отвечает за вставку текстового представления значения элемента данных в текущий буфер.
Как правило, вы определяете ewoc с помощью ewoc-create, а затем передаете полученную структуру ewoc другим функциям в пакете Ewoc для создания узлов внутри нее и отображения ее в буфере. После отображения в буфере другие функции определяют соответствие между позициями буфера и узлами, перемещают точку от текстового представления одного узла к другому и т. д. См. Функции абстрактного вывода.
Узел инкапсулирует элемент данных так же, как переменная содержит значение. Обычно инкапсуляция происходит как часть добавления узла в ewoc. Вы можете получить значение элемента данных и заменить его новым значением, как показано ниже:
(ewoc-data node) ⇒ value (ewoc-set-data node new-value) ⇒ new-value
Вы также можете использовать в качестве значения элемента данных объект Lisp (список или вектор), который является контейнером для реального значения, или индекс в некоторую другую структуру. Пример (см. Пример абстрактного вывода) использует последний подход.
При изменении данных вы захотите обновить текст в буфере. Вы можете обновить все узлы, вызвав ewoc-refresh, или только определенные узлы, используя ewoc-invalidate, или все узлы, удовлетворяющие предикату, используя ewoc-map. В качестве альтернативы, вы можете удалить недействительные узлы, используя ewoc-delete или ewoc-filter, и добавить новые узлы на их место. Удаление узла из ewoc также удаляет связанное текстовое описание из буфера.
| • Функции абстрактного вывода | Функции пакета Ewoc. | |
| • Пример абстрактного вывода | Пример использования Ewoc. |
Copyright © 1990-1996, 1998-2022 Free Software Foundation, Inc.
Licensed under the GNU GPL license.
https://www.gnu.org/software/emacs/manual/html_node/elisp/Abstract-Display.html