3个版本 (破坏性更新)

0.3.0 2019年6月29日
0.2.0 2017年4月11日
0.1.0 2017年1月9日

#117 in 文本编辑器

每月22次下载

Apache-2.0

1MB
24K 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,用Rust编写的类似Vim的前端。

以下项目目前处于非活动状态,基于较早版本的前端协议,但可能可以复兴

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

设计决策

以下是部分设计决策及其动机,说明它们如何有助于实现上述目标

  • 前端和后端模块分离。前端负责呈现用户界面和绘制满屏文本。后端(也称为“核心”)持有文件缓冲区,并负责所有潜在的昂贵编辑操作。

  • 原生UI。跨平台UI工具包从外观和感觉上总是不够完美。构建UI的最佳技术是平台的原生框架。在Mac上,那就是Cocoa。

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

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

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

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

  • JSON。前端/后端通信协议以及后端与插件之间的协议基于简单的JSON消息。我考虑过二进制格式,但实际性能提升将微乎其微。使用JSON大大降低了开发插件的摩擦,因为大多数现代语言都自带JSON,而对于其他语言,也有许多库可用。

当前状态

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

作者

xi-editor 项目是由 Raph Levien 启动的,但此后已经收到了许多其他人的贡献。有关详细信息,请参阅AUTHORS 文件。

许可协议

本项目采用 Apache 2许可协议

贡献

我们欢迎通过 GitHub pull request 的方式贡献。请参阅CONTRIBUTING.md 获取更多详细信息。

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


lib.rs:

xi-core 的主要库。

依赖项

~7–17MB
~210K SLoC