2 个版本

0.0.3 2023 年 1 月 29 日
0.0.2 2023 年 1 月 15 日
0.0.1 2023 年 1 月 15 日

#637命令行界面

MIT 许可证

41KB
994

Termix 是一个受 bubbletea 启发的 TUI 应用程序框架。Termix 的接口与它非常相似。

查看示例

cargo run --example <simple | views>

开发中

  • 鼠标支持
  • 一些有用的插件
  • 更多可定制的界面
  • Windows 支持 等

参考

Termix 从许多其他项目中借鉴了想法

  • bubbletea
    • 架构和界面灵感。
    • 如何渲染。
  • tuikit
    • 如何进入原始模式。
    • 部分按键解析逻辑。
    • 还受到 termionrustyline 的启发。

lib.rs:

Termix

Termix 是一个用于构建 TUI 应用的简单框架。此框架受 bubbletea 启发。

目前,此框架是测试版本和开发中。

使用方法

在您的 Cargo.toml 中添加以下内容

[dependencies]
termix = "0.1.0"

这里是一个示例

use std::time::Duration;

use termix::{
    color::{Color, StyledText},
    event::Event,
    model::{ModelAct, Updater},
    Program,
};

struct Model(usize);

#[derive(Debug)]
struct Tick {}

impl ModelAct<Model, Tick> for Model {
    fn update(&self, event: &Event<Tick>) -> Updater<Model, Tick> {
        match event {
            Event::Init => (Some(Box::new(Model(self.0))), Some(tick)),
            Event::Custom(_) => {
                if self.0 - 1 == 0 {
                    return (Some(Box::new(Model(self.0 - 1))), Some(|| Event::Quit));
                }
                (Some(Box::new(Model(self.0 - 1))), Some(tick))
            }
            Event::Keyboard(..) => (None, Some(|| Event::Quit)),
            _ => (None, None),
        }
    }
    fn view(&self) -> String {
        StyledText::new(
            &format!(
                "Hi. This program will exit in {} seconds. To quit sooner press any key.\n",
                self.0
            ),
            Some(Color::Ansi256(212)),
            None,
            None,
            None,
            None,
        )
        .text()
    }
}

fn tick() -> Event<Tick> {
    let one_sec = Duration::from_secs(1);
    std::thread::sleep(one_sec);
    Event::Custom(Tick {})
}

fn main() {
    Program::new(Box::new(Model(5))).run();
}

要了解如何实际使用 termix,您可以查看示例

依赖项

~2.5MB
~54K SLoC