#tui #terminal #tea #apps #ui-framework #functional #interface

milk-tea

一个用于创建 TUI 应用程序的最小库

5 个不稳定版本

0.3.0 2024年6月28日
0.2.0 2024年6月27日
0.1.2 2024年6月27日
0.1.1 2024年6月27日
0.1.0 2024年6月27日

#321命令行界面

Download history 410/week @ 2024-06-25 47/week @ 2024-07-02 34/week @ 2024-07-23 17/week @ 2024-07-30

51 每月下载量

MIT 许可证

19KB
505 代码行

🧋 牛奶茶

牛奶茶是一个用于创建 TUI(终端用户界面)应用程序的最小 Rust 库。它采用函数式方法构建应用程序,灵感来源于许多现代 Web 框架。

注意: 这个库与 Go 库 Bubble Tea 没有任何关系。它只是碰巧也以波霸茶命名,也碰巧是一个基于 MVU 的 TUI 库。(我不知道如何搜索项目名称,显然 QwQ)

入门指南

cargo add milk-tea
//! Prints "hello world :3" in magenta and bold to the top left of the screen.

use milk_tea::{
    area::Area,
    draw_call::{DrawCall, DrawCallKind},
    event::{Event, KeyCode, KeyEvent},
    pair::Pair,
    run,
    style::{ContentStyle, Stylize},
    text_size::UnicodeSize,
};

fn main() {
    run(Model::default(), view, update).unwrap();
}

/// Handles drawing to the screen. An `Area` collects any draw calls we push to it to be rendered
/// later.
fn view(_model: &Model, area: &mut Area) {
    area.push_all(vec![
        DrawCall::new(
            Pair::fill(0),
            DrawCallKind::SetStyle(ContentStyle::new().magenta().bold()),
        ),
        DrawCall::new(
            Pair::fill(0),
            DrawCallKind::PrintLine("hello world! :3".limit_size(area.size())),
        ),
    ]);
}

/// Handles events and updates the `Model`.
fn update(event: Event, model: &mut Model) {
    if let Event::Key(KeyEvent {
        code: KeyCode::Esc, ..
    }) = event
    {
        model.0 = true
    }
}

/// Represents the application state.
#[derive(Default, Clone, PartialEq, Eq)]
struct Model(bool);

impl milk_tea::Model for Model {
    fn should_exit(&self) -> bool {
        self.0
    }
}

更多示例可以在 examples 目录中找到。使用 cargo run --example example_name 运行示例。

依赖项

~1.3–6.5MB
~28K SLoC