quvyta
语言: 简体中文

quvyta-framework

qframe

面向终端应用的 Rust 框架。它提供运行时、一整套组件,以及主题、图标和语言文件,并且只有一条视觉规则:形状来自颜色,而不是方括号或制表符。

cargo add quvyta-framework
25 秒看展示程序,由它自己的测试录制:运行中的仪表盘示例依次经过 Nordic、Amber 和 Monochrome 主题,然后命令面板打开标签页页面,并从实时演示转到它的代码。

一个最小的应用

数据,绘制数据的视图,改变数据的更新。

运行时把按键和点击变成消息,只有在内容变化时才重绘。软件包名为 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。每个字形在任何模式下都正好占一格。

  • 九种语言

    英语、土耳其语、德语、西班牙语、法语、巴西葡萄牙语、俄语、简体中文和日语,每个组件都有;你自己应用的文字就放在它们旁边。

  • 键盘和鼠标

    每个控件都同时响应两者,并使用同一道色阶:静止、悬停、聚焦、按下。

  • 轻声细语的动效

    时长来自主题,减少动态效果的偏好在任何地方都会被尊重。

四款主题

同一个界面,四款主题。

每种颜色都来自主题,因此一个设置就能改变整个应用。在下面选一个,同一块仪表盘就会换上它的颜色;切换靠四个单选按钮,完全不用脚本。

主题
Iris 主题下的展示程序,同一块仪表盘:CPU 迷你折线、资源计量条、每个服务一条进度条、状态标记和一个大时钟
Iris:家族自己的颜色,也是本站的颜色。
Nordic 主题下的展示程序,同一块仪表盘:CPU 迷你折线、资源计量条、每个服务一条进度条、状态标记和一个大时钟
Nordic:清冷的蓝。
Amber 主题下的展示程序,同一块仪表盘:CPU 迷你折线、资源计量条、每个服务一条进度条、状态标记和一个大时钟
Amber:通篇暖色调。
Monochrome 主题下的展示程序,同一块仪表盘:CPU 迷你折线、资源计量条、每个服务一条进度条、状态标记和一个大时钟
Monochrome:通篇灰度,颜色只留给状态。

展示程序

每个组件都有一页。

安装展示程序并运行 qframe:每个组件都有实时演示、源码、指南和参考。本页的每张图都是它的测试界面之一,在没有终端的情况下绘制。

cargo install quvyta-framework-showcase && qframe

文档

到哪里读更多。