2个不稳定版本
0.2.0 | 2023年6月5日 |
---|---|
0.1.0 | 2022年3月22日 |
362 在 命令行界面
1,835 每月下载次数
用于 stoic
3MB
3.5K SLoC
用于构建Rust文本用户界面(TUI)的组件式框架
GitHub上有这个仓库的几个副本,facebookincubator/superconsole 是官方版本。
superconsole 框架提供了对基于文本的渲染的强大行抽象。它还提供了基本构建块,如行操作和更高层次的组合组件。包含一系列“电池”组件,以帮助开发者尽可能快速地创建文本用户界面(TUI)。
superconsole背后的设计选择是为了优先考虑可测试性、易于组合和灵活性。
Superconsole还提供样式化,包括斜体、下划线、加粗和文字着色。此外,依赖crossterm确保它与Windows、Unix和MacOS兼容。
最后,superconsole区分渲染逻辑和程序状态 - 每个渲染调用都接受对状态的不可变引用,组件可以使用它将状态注入其不可变的渲染逻辑中。
演示
示例
use std::convert::TryInto;
use superconsole::components::bordering::{Bordered, BorderedSpec};
use superconsole::{Component, Dimensions, DrawMode, Lines, SuperConsole};
#[derive(Debug)]
struct HelloWorld;
impl Component for HelloWorld {
fn draw_unchecked(&self, _dimensions: Dimensions, _mode: DrawMode) -> anyhow::Result<Lines> {
Ok(Lines(vec![
vec!["Hello world!".to_owned()].try_into().unwrap(),
]))
}
}
pub fn main() -> anyhow::Result<()> {
let bordering = BorderedSpec::default();
let mut superconsole = SuperConsole::new().ok_or_else(|| anyhow::anyhow!("Not a TTY"))?;
let component = Bordered::new(HelloWorld, bordering);
superconsole.render(&component)?;
superconsole.finalize(&component)?;
Ok(())
}
有关如何帮助的详细信息,请参阅CONTRIBUTING 文件。
许可证
Superconsole同时受MIT和Apache许可证,版本2.0许可,如LICENSE-MIT 和 LICENSE-APACHE 文件所示。
依赖项
~18–30MB
~486K SLoC