2 个不稳定版本

0.2.0 2019年6月29日
0.1.0 2019年3月31日

#151 in 性能分析


2 crates 中使用

Apache-2.0

70KB
1.5K SLoC

Xi 编辑器

维护状态: *xi-editor 项目目前已停止开发。尽管我们乐意接受错误修复,但目前没有计划添加新功能。您可能对 Lapce 编辑器 感兴趣,它可以被认为是 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请求进行贡献。有关更多详细信息,请参阅CONTRIBUTING.md

如果您有兴趣进行贡献但不确定从何开始,在https://xi.zulipchat.com的#xi-editor上有一个活跃的Zulip频道。在irc.mozilla.org上还有一个#xi频道。最后,在/r/xi_editor上有一个subreddit。

依赖项

~1–2.2MB
~43K SLoC