Crate | Описание |
---|---|
helix-core | Основные функциональные примитивы редактирования. |
helix-lsp | Клиент языкового сервера. |
helix-dap | Клиент протокола отладки (DAP). |
helix-loader | Функции для создания, получения и загрузки внешних ресурсов. |
helix-view | Абстракции пользовательского интерфейса для серверной части, императивная оболочка. |
helix-term | Терминальный пользовательский интерфейс. |
helix-tui | Примитивы TUI, ответвление от tui-rs, вдохновлённое Cursive. |
Этот документ содержит общий обзор внутренней структуры Helix.
ПРИМЕЧАНИЕ: Используйте
cargo doc --open
для документации API, а также документации зависимостей.
Core содержит основные строительные блоки, используемые для создания редактора. Он в значительной степени основан на CodeMirror 6. Примитивы функциональны: большинство операций не изменяют данные на месте, а возвращают новую копию.
Основная структура данных, используемая для представления буферов, — это Rope
. Мы повторно экспортируем отличную библиотеку ropey. Канаты легко клонировать, и они позволяют нам легко создавать моментальные снимки текстового состояния.
Множественные выделения являются основным примитивом редактирования. Выделения документов представлены объектом Selection
. Каждый диапазон в выделении состоит из движущейся головы и неподвижного якоря. Один курсор в редакторе — это просто выделение с одним диапазоном, где голова и якорь находятся в одном и том же положении.
Канаты изменяются путём создания транзакции OT-типа. Она представляет собой одно согласованное изменение документа и может быть применена к канату. Транзакцию можно инвертировать для отмены изменений. Выделения и метки могут быть сопоставлены с транзакцией для перевода в позицию в новом текстовом состоянии после применения транзакции.
ПРИМЕЧАНИЕ:
Transaction::change
/Transaction::change_by_selection
— основной интерфейс, используемый для генерации текстовых правок.
Syntax
— это интерфейс, который используется для взаимодействия с древовидными AST-деревьями для подсветки синтаксиса и других функций.
Уровень view
должен был стать независимой от внешнего интерфейса императивной библиотекой, которая будет построена поверх core
для обеспечения общей логики редактора. В настоящее время он привязан к пользовательскому интерфейсу терминала.
Объект Document
связывает вместе Rope
, Selection
(s), Syntax
, историю документов и т. д. в полное представление открытого файла.
View
представляет собой открытый раздел в пользовательском интерфейсе. Он содержит текущий идентификатор открытого документа и другое связанное состояние. Представления инкапсулируют желоб, строку состояния, диагностику и внутреннюю область, в которой отображается код.
ПРИМЕЧАНИЕ: Несколько представлений могут отображать один и тот же документ, поэтому документ содержит выделения для каждого представления. Чтобы получить их,
document.selection()
принимаетViewId
.
Info
— это окно автоинформации, которое показывает подсказки при ожидании другой клавиши с привязками, такими как g
и m
. Оно прикреплено к области просмотра в целом.
Surface
подобен буферу, на который рисуют себя виджеты, и поверхность затем отображается на экране в каждом цикле.
Области Rect
(просто координата x и y с началом координат в верхнем левом углу экрана, а затем высота и ширина) являются частью Surface
. Они могут использоваться для ограничения области, в которую компонент может отображаться. Например, если мы обернём компонент Markdown
в Popup
(подумайте о всплывающем окне документации с пробелом + k), метод рендеринга Markdown получит Rect, который является точным размером всплывающего окна.
Виджеты называются Component
внутренне, и вы можете увидеть большинство из них в helix-term/src/ui
. Некоторые компоненты, такие как Popup
и Overlay
, могут принимать другие компоненты в качестве дочерних.
Слои — это способ отображения нескольких компонентов, и это просто Vec<Component>
. Слои управляются Compositor
. При каждом вызове рендеринга верхнего уровня компоновщик отображает каждый компонент в порядке их появления.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )