4 个版本 (2 个重大更改)
0.3.0 | 2024年7月17日 |
---|---|
0.2.1 | 2024年6月6日 |
0.2.0 | 2022年3月22日 |
0.1.0 | 2022年3月14日 |
#162 在 命令行界面
每月下载量:1,179
145KB
4K SLoC
noline
noline 是一个与 IO 无关的 #[no_std]
行编辑器,为任何系统提供强大的行编辑功能。其核心功能不涉及 IO,因此可以适应任何系统,无论是嵌入式、异步、异步嵌入式、WASM 或 IPoAC(通过鸟类载体进行 IP 通信)。
功能
- IO 无关
- 最小依赖
- 无需分配 - 提供基于堆和静态缓冲区
- UTF-8 支持
- Emacs 键绑定
- 行历史记录
可能的未来功能
- 自动完成和提示
API 应视为实验性的,将来可能会有所变化。
核心实现由一个状态机组成,该状态机以字节为输入,并生成字节切片的迭代器。由于这个过程不涉及任何 IO,noline 可以适应任何平台。
noline 包含多个实现
sync_editor::Editor
– 用于同步 IO 的编辑器,以下为包装器sync_io::IO
– 用于embedded_io::Read
和embedded_io::Write
的 IO 包装器
async_editor::Editor
- 用于异步IO的编辑器,以下为包装器
可以使用builder::EditorBuilder
构建编辑器。
示例
use noline::{builder::EditorBuilder, sync_io::std_sync::StdIOWrapper, sync_io::IO};
use std::fmt::Write;
use std::io;
use termion::raw::IntoRawMode;
fn main() {
let _stdout = io::stdout().into_raw_mode().unwrap();
let prompt = "> ";
let mut io = IO::<StdIOWrapper>::new(StdIOWrapper::new());
let mut editor = EditorBuilder::new_unbounded()
.with_unbounded_history()
.build_sync(&mut io)
.unwrap();
while let Ok(line) = editor.readline(prompt, &mut io) {
writeln!(io, "Read: '{}'", line).unwrap();
}
}
更多详情请见文档。
用法
将以下内容添加到您的Cargo.toml文件中
[dependencies]
noline = "0.3.0"
许可证
MPL-2.0
依赖项
~0.3–10MB
~106K SLoC