quvyta-framework
qframe
面向终端应用的 Rust 框架。它提供运行时、一整套组件,以及主题、图标和语言文件,并且只有一条视觉规则:形状来自颜色,而不是方括号或制表符。
cargo add quvyta-framework一个最小的应用
数据,绘制数据的视图,改变数据的更新。
运行时把按键和点击变成消息,只有在内容变化时才重绘。软件包名为 quvyta-framework,库名为 qframe,所以代码里写作 use qframe::prelude::*;。
同一个应用可以在完全没有终端的测试中运行:按键、点击,再把屏幕当作文本读回来。
给人看的文字应放在语言文件里,用 t!("key") 读取;示例为求简短才直接写字符串。需要 Rust 1.95 或更新版本。
use qframe::prelude::*;
#[derive(Default)]
struct Counter {
count: i32,
}
#[derive(Clone)]
enum Msg {
Increment,
}
impl App for Counter {
type Msg = Msg;
fn update(&mut self, msg: Msg) -> Command<Msg> {
match msg {
Msg::Increment => self.count += 1,
}
Command::none()
}
fn view(&self, ui: &mut View<'_, Msg>) {
ui.column(|ui| {
ui.add(Text::new(format!("Count: {}", self.count)));
ui.add(Button::new("Add one").variant("primary").on_press(Msg::Increment));
})
.gap(1);
}
}
// 测试在没有终端的情况下驱动同一个应用。
let mut app = Harness::new(Counter::default(), 30, 4);
app.press("tab").press("enter");
assert!(app.screen().contains("Count: 1"));
它带来了什么
一个用心的终端应用所需的一切。
- 组件
按钮、列表、树、表格、标签页、表单与向导,日期、时间和时长输入框,文件与文件夹选择器,菜单、通知、提示气泡,命令面板,图表,Markdown、代码和日志视图,还有一个终端。
- 主题
Iris、Nordic、Amber 和 Monochrome。每种颜色都来自主题,因此一个设置就能改变整个应用。
- 三种模式的图标
Nerd Font、纯 Unicode 和 ASCII。每个字形在任何模式下都正好占一格。
- 九种语言
英语、土耳其语、德语、西班牙语、法语、巴西葡萄牙语、俄语、简体中文和日语,每个组件都有;你自己应用的文字就放在它们旁边。
- 键盘和鼠标
每个控件都同时响应两者,并使用同一道色阶:静止、悬停、聚焦、按下。
- 轻声细语的动效
时长来自主题,减少动态效果的偏好在任何地方都会被尊重。
四款主题
同一个界面,四款主题。
每种颜色都来自主题,因此一个设置就能改变整个应用。在下面选一个,同一块仪表盘就会换上它的颜色;切换靠四个单选按钮,完全不用脚本。
展示程序
每个组件都有一页。
安装展示程序并运行 qframe:每个组件都有实时演示、源码、指南和参考。本页的每张图都是它的测试界面之一,在没有终端的情况下绘制。
cargo install quvyta-framework-showcase && qframe