4 个版本
0.1.3 | 2024年7月17日 |
---|---|
0.1.2 | 2024年7月12日 |
0.1.1 | 2023年10月31日 |
0.1.0 | 2023年10月31日 |
#62 in 文本编辑器
每月 188 下载
94KB
1.5K SLoC
Duat
Duat是古埃及神话中的阴间,是神俄西里斯的家园,死者在那里接受审判,并可能因为一根羽毛的重量而失去来世的权利。它也是一个文本编辑器。
Duat是一个通过Rust包进行配置的文本编辑器。使用包进行此类目的意味着可扩展性潜力——以及我添加功能的能力——将大大增加。
安装后,Duat将能够自动检测用户配置的变化,并在几秒钟的延迟后实时更改,以反映新的配置。
目前它仍在开发中,许多功能尚未实现(例如LSP插件...)。
如何使用
为了使用它,您必须安装cargo
。如果您已安装,请运行
cargoinstall duat
这将安装Duat的默认版本,它使用终端用户界面。它还会在$XDG_CONFIG_HOME/duat/
或~/.config/duat/
中创建一个配置目录。此配置将有一些默认更改,但您可以按需修改它。它还包括一些解释Duat基本功能的文档。
目前,唯一的UI是终端UI,但Duat被构建成这样的方式,以至于创建新的UI是可能的。
目前,它有一个基于Kakoune的基本配置,因此如果您熟悉该文本编辑器,许多命令都将相同。
配置
在配置文件中,应该有一个run!
宏。此宏将用于配置Duat。(最终,我希望用进程宏替换它,因为它们似乎更适合由rust-analyzer处理)
以下是一个示例配置文件,它使用了duat-kak
use duat::prelude::*;
// Since duat_kak is a plugin, it must be used explicitely.
use duat_kak::{KeyMap, Mode, OnModeChange};
run! {
use duat::prelude::*;
// Since duat_kak is a plugin, it must be used explicitely.
use duat_kak::{KeyMap, Mode, OnModeChange};
run! {
// The print module manages the printing of files.
print::wrap_on_width();
hooks::remove_group("FileWidgets");
// This hook lets you push widgets to the files.
hooks::add::<OnFileOpen>(|builder| {
// By default, these go on the left.
builder.push::<VertRule>();
builder.push::<LineNumbers>();
});
hooks::remove_group("WindowWidgets");
// Same, but on the edges of the window.
hooks::add::<OnWindowOpen>(|builder| {
// "[" "]" pairs change the style of text.
let status_line = status!(
[File] { File::name } " "
{ KeyMap::mode_fmt } " "
selections_fmt " " main_fmt
);
// As opposed to `builder.push`, this one
// takes a user defined configuration.
let (child, _) = builder.push_cfg(status_line);
let cmd_line = CommandLine::cfg().left_with_percent(30);
// `push_cfg_to` pushes a widget to another.
builder.push_cfg_to(cmd_line, child);
});
input::set(KeyMap::new());
// This is a hook provided by duat-kak.
hooks::add::<OnModeChange>(|(_, new)| match new {
Mode::Insert => cursor::set_main(CursorShape::SteadyBar),
_ => cursor::set_main(CursorShape::SteadyBlock),
});
// This is a form also provided by duat-kak.
forms::set("Mode", Form::new().dark_magenta());
}
路线图
这些是已经完成或正在进行的目标
- 实现基本视觉功能(打印、滚动等);
- 实现换行;
- 实现编辑功能;
- 创建kak模式;
- 实现多光标的使用;
- 实现历史系统;
- 实现颜色功能;
- 实现小部件和指定区域;
- 使所有这些功能在公共接口上易于使用;
- 创建数字线和分隔线;
- 创建状态行;
- 文件切换;
- 创建命令创建界面和命令行;
- 添加框架区域的能力;
- 实现隐藏功能;
- 实现配置的热重载;
- 创建“正常编辑”模式;
- 添加创建钩子的能力;
- 创建一个更通用的插件系统;
- 添加不与会话布局绑定的浮动小部件;
- 实现自动完成列表;
- 创建一个LSP插件;
- 创建vim模式;
- 添加正则表达式搜索器(可能是新的regex-streams?!?!);
...
- 创建EGUI前端;
注意:这些内容并非固定,可能会以不同的顺序完成。
动机
这个项目主要是作为一个有趣的小项目来打发我的时间,同时我对当前的开源文本编辑器的功能也不满意。
为什么叫这个名字
不知道,这是一个听起来很酷的词,我从Spelunky 2中得到的。
依赖项
~3–13MB
~157K SLoC