#user-interface #tui #terminal

tortoise

在 Rust 中构建终端用户界面

1 个不稳定版本

0.1.0 2021 年 6 月 24 日

#900命令行界面

MIT 许可证

54KB
1.5K SLoC

Tortoise

在 Rust 中构建终端用户界面。


lib.rs:

tortoise 是一个用于在 Rust 中构建终端用户界面的 crate。

use tortoise::{event::Event, screen::Screen, style::Style};

let mut screen = Screen::open().unwrap();
screen.hide_cursor().unwrap();
loop {
let event = screen.listen().unwrap();
match event {
Event::Char('q') => break,
_ => {
screen.clear_row(0);
screen.put_str(0, 0, Style::default(), &format!("{}", event));
screen.flush().unwrap();
}
}
}

term-ui 在 Unix 上使用 /dev/tty,在 Windows 上使用 $CONOUT$ 而不是 stdin/stdout,这样您的程序仍然可以使用标准 I/O 进行一些有用的操作。例如,您可以编写一个交互式文本编辑器,可以这样调用。

echo "hello" | your-editor | # use the output...

而不是将 "hello" 解释为界面中的按键,文本编辑器可以使用 "hello" 作为基础文本,并将结果文本写入 stdout。

Screen 是一个二维的 Cell 网格,每个 Cell 存储一个字符及其关联的样式信息,如颜色、粗体等。您的应用程序可以操作这个网格,然后在 Screen 上调用 "flush" 来将任何更改写入终端。只有在调用 flush() 之前,才会将内容写入终端,并且库会跟踪哪些单元格已更改,以最小化写入的数据量。这意味着您的代码在跟踪屏幕需要更改的部分时可以不太聪明,但您的应用程序将保持相对快速。

依赖项

~8–10MB
~193K SLoC