4个版本 (2个重大变更)

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

#363 in 文本处理

Download history 430/week @ 2023-12-17 210/week @ 2023-12-24 289/week @ 2023-12-31 685/week @ 2024-01-07 389/week @ 2024-01-14 464/week @ 2024-01-21 458/week @ 2024-01-28 444/week @ 2024-02-04 1077/week @ 2024-02-11 751/week @ 2024-02-18 554/week @ 2024-02-25 406/week @ 2024-03-03 383/week @ 2024-03-10 449/week @ 2024-03-17 216/week @ 2024-03-24 161/week @ 2024-03-31

1,222 每月下载量
6 crates 中使用

Apache-2.0

325KB
6.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拉取请求的方式进行贡献。请参阅CONTRIBUTING.md以获取更多详细信息。

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


lib.rs:

文本树。

依赖项

~2.9–4.5MB
~71K SLoC