#b-tree #rope #editor #built #top

lapce-xi-rope

基于B-Tree构建的通用绳数据结构

2 个版本

0.3.2 2023年5月14日
0.3.1 2022年11月1日

#763 in 数据结构

Download history 474/week @ 2024-03-14 433/week @ 2024-03-21 465/week @ 2024-03-28 317/week @ 2024-04-04 295/week @ 2024-04-11 363/week @ 2024-04-18 551/week @ 2024-04-25 432/week @ 2024-05-02 471/week @ 2024-05-09 486/week @ 2024-05-16 420/week @ 2024-05-23 574/week @ 2024-05-30 650/week @ 2024-06-06 516/week @ 2024-06-13 466/week @ 2024-06-20 369/week @ 2024-06-27

2,068 每月下载量
用于 2 个crate(通过 lapce-rpc

Apache-2.0

330KB
6.5K SLoC

Xi Editor
Xi 编辑器

(发音为 "Zigh")

一个使用Rust编写的后端的现代编辑器。

维护状态: xi-editor项目目前没有处于积极开发状态。虽然我们乐于接受错误修正,但目前没有计划添加新功能。我们希望在未来的某个时候再次回顾编写文本编辑器,但就目前而言,我们的注意力在其他地方。 — 编辑者

注意: 此仓库仅包含编辑器核心,不能单独使用。有关基于它的编辑器,请查看前端列表。

xi-editor项目是尝试使用现代软件工程技术构建高质量文本编辑器的一次尝试。它最初是为macOS构建的,使用Cocoa进行用户界面。还有第三方开发者提供的其他操作系统的前端。

目标包括

  • 极高的性能。所有编辑操作应在16ms内提交和绘制。编辑器永远不应该让您等待。

  • 美观。编辑器应适合现代桌面,看起来不应像80年代或90年代的复古产品。文本绘制应使用最佳技术(Mac上的Core Text,Windows上的DirectWrite等),并完全支持Unicode。

  • 可靠性。崩溃、挂起或丢失工作不应发生。

  • 开发者友好。应易于自定义xi编辑器,无论是通过添加插件还是修改核心。

了解更多有关Xi的创造者Raph Levien在此Recurse Center Localhost演讲

截图

xi-mac screenshot

入门

此存储库仅包含核心。您还需要以下列表中的一个前端。

构建核心

Xi-editor针对'最近的稳定Rust'。我们建议通过rustup安装。当前最低支持的版本是1.40。

要从此存储库的根目录构建xi-editor核心

> cd rust
> cargo build

前端

以下是一些处于不同开发阶段的前端

  • xi-mac,官方的macOS前端。

  • xi-gtk,一个基于GTK+的前端。

  • xi-term,一个文本用户界面。

  • xi-electron,一个基于Web技术的跨平台前端。

  • Tau,一个用Rust编写的GTK+前端。由已弃用的https://github.com/bvinc/gxi分支而来。

  • xi-win,一个用Rust编写的实验性Windows前端。

  • kod,一个用Golang编写的终端前端。

  • xi-qt,一个Qt前端。

  • vixi,一个类似Vim的Rust前端。

以下目前处于不活跃状态,基于早期版本的前端协议,但或许可以复兴

有关协议的说明(目前还不算是文档)可以在frontend.md找到。如果您正在开发前端,请随时提交PR以将其添加到上述列表中。

设计决策

以下是一些设计决策及其为什么它们应该有助于实现上述目标的原因

  • 将前端和后端模块分离。前端负责展示用户界面和绘制屏幕上的文本。后端(也称为“核心”)持有文件缓冲区,并负责所有可能昂贵的编辑操作。

  • 原生UI。跨平台的UI工具包永远不会看起来和感觉完全正确。构建UI的最佳技术是平台的原生框架。在Mac上,那就是Cocoa。

  • Rust。后端需要极高的性能。特别是,它应该使用的内存比正在编辑的缓冲区少。这种性能在C++中是可能的,但Rust提供了更可靠、在很多方面更高级的编程平台。

  • 持久性绳数据结构。持久性绳对于非常大的文件来说效率很高。此外,它们向客户端提供了一个简单的接口——从概念上讲,它们就像字符串一样是一系列字符,客户端无需了解任何内部结构。

  • 异步操作。编辑器永远不应该阻塞并阻止用户完成工作。例如,自动保存将启动一个线程,该线程包含当前编辑器缓冲区的快照(持久性绳数据结构是按写入复制的,因此此操作几乎免费),然后可以自由地将数据写入磁盘,同时缓冲区仍然完全可编辑。

  • 插件优于脚本。大多数文本编辑器都有一个关联的脚本语言用于扩展功能。然而,这些语言通常既更加神秘又不如“真实”语言强大。xi编辑器将通过管道与插件通信,允许它们用任何语言编写,并使其更容易与版本控制、更深入的代码静态分析器等系统集成。

  • JSON. 前端/后端通信,以及后端与插件之间的协议,均基于简单的JSON消息。我曾考虑过二进制格式,但实际性能的提升几乎可以忽略不计。使用JSON可以显著降低开发插件时的摩擦,因为它对大多数现代语言来说都是现成的,并且为其他语言提供了丰富的库。

当前状态

这仍然是一个处于早期阶段的项目。Mac版本的构建具有基本的编辑功能(它被用来编写此README),但看起来非常简洁,并且仍然缺少一些基本功能,例如自动缩进。目前,预计其主要社区将是那些对在文本编辑器上进行黑客攻击的开发者。

作者

xi-editor项目由Raph Levien发起,但自那时以来已经收到了许多其他人的贡献。有关详细信息,请参阅AUTHORS文件。

许可协议

本项目采用Apache 2 许可协议

贡献

我们欢迎通过GitHub pull requests进行贡献。有关更多详细信息,请参阅CONTRIBUTING.md

如果您有兴趣做出贡献但不确定从哪里开始,可以在https://xi.zulipchat.com上的#xi-editor通道找到活跃的Zulip频道。irc.mozilla.org上也有一个#xi频道。最后,还有一个/r/xi_editor子版块。


lib.rs:

文本树。

依赖项

~2.8–4MB
~70K SLoC