#用户界面 #tui #ui #ncurses #后端 #应用

cursive

一个注重易用性的 TUI (文本用户界面) 库

65 个版本

0.21.1 2024 年 8 月 3 日
0.20.0 2022 年 9 月 9 日
0.19.0 2022 年 7 月 22 日
0.17.0 2022 年 1 月 10 日
0.1.1 2016 年 7 月 21 日

36命令行界面

Download history 2443/week @ 2024-05-05 3126/week @ 2024-05-12 3764/week @ 2024-05-19 3175/week @ 2024-05-26 3879/week @ 2024-06-02 2999/week @ 2024-06-09 3126/week @ 2024-06-16 3196/week @ 2024-06-23 1897/week @ 2024-06-30 2070/week @ 2024-07-07 3608/week @ 2024-07-14 3368/week @ 2024-07-21 2934/week @ 2024-07-28 2816/week @ 2024-08-04 3276/week @ 2024-08-11 2569/week @ 2024-08-18

11,931 每月下载量
用于 163 个 crate(144 个直接使用)

MIT 许可证

1MB
22K SLoC

Cursive

crates.io Rust MIT licensed Gitter chat

Cursive 是一个 Rust 的 TUI (文本用户界面) 库。它默认使用 crossterm 后端,但也提供其他后端。

它允许您为终端应用程序构建丰富的用户界面。

文档

它被设计成安全且易于使用

[dependencies]
cursive = "0.21"

或使用最新的 git 版本

[dependencies]
cursive = { git = "https://github.com/gyscos/cursive" }
use cursive::views::{Dialog, TextView};

fn main() {
    // Creates the cursive root - required for every application.
    let mut siv = cursive::default();

    // Creates a dialog with a single "Quit" button
    siv.add_layer(Dialog::around(TextView::new("Hello Dialog!"))
                         .title("Cursive")
                         .button("Quit", |s| s.quit()));

    // Starts the event loop.
    siv.run();
}

Cursive dialog example

查看其他 示例 以获取这些结果以及其他更多内容

lorem.rs example menubar.rs example select.rs example mines example theme_manual.rs example syntect example

(颜色可能取决于您的终端配置。)

教程

这些教程可能有助于您开始使用 cursive

第三方视图

以下是一些为您实现新视图的 crate

展示

以下是一些使用 cursive 的酷应用

  • RustyChat:使用 Rust 和 Cursive 开发的聊天客户端。
  • checkline:从 stdin 到 stdout 的复选框行选择器。
  • clock-cli:具有计时器和倒计时功能的时钟。
  • fui:为您的程序添加 CLI 和表单界面。
  • game2048-rs:使用 Rust 和 cursive 的 tui 游戏 2048。
  • git-branchless:Git 的无分支工作流程。
  • grin-tui:MimbleWimble 协议的最小实现。
  • kakikun:用于终端的绘画和 ASCII 艺术应用程序。
  • launchk:在 macOS 上管理 launchd 代理和守护进程。
  • markline:基于标记的从 stdin 到 stdout 的行选择器。
  • mythra:用于搜索音乐的 CLI。
  • ncspot:跨平台的 ncurses Spotify 客户端。
  • rbmenu-tui:用于书签管理的 TUI。
  • retris:经典俄罗斯方块的简单实现。
  • ripasso:用 Rust 编写的简单密码管理器。
  • rusty-man:浏览 rustdoc 文档。
  • saci-rs:简单的 API 客户端接口。
  • so:Stack Overflow 的终端界面。
  • sudoku-tui:在命令行上玩数独。
  • tap:具有模糊查找器的终端音频播放器。
  • ttyloop:移动游戏 Loop 的克隆。
  • wiki-tui:简单易用的维基百科文本用户界面。

目标

  • 易用性。 简单的应用程序应该简单。复杂的应用程序应该易于管理。
  • Linux TTY 兼容性。 颜色可能受到影响,UTF-8 可能过多,但大多数功能必须在 Linux TTY 上正常工作。
  • 灵活性。 此库应能够处理简单的 UI 脚本、复杂的实时应用程序,甚至游戏。
    • 特别是,它试图拥有足够的功能来重现这些类型的工具

兼容性

首先,终端很混乱。一组小的功能是标准的,但超出这个范围,几乎每个终端都有自己的实现。

输出

  • 颜色:基本的 8 种颜色调色板应该广泛支持。在原始 Linux TTY 中不支持用户定义的颜色,但在大多数终端中应该工作,尽管仍然是实验性的。
  • UTF-8:目前 Cursive 非常期待 UTF-8 位置。它最终可能会得到修复以支持其他位置上的窗口边框,但这不是优先事项。对 宽字符 有初始支持。 RTL 支持已在 计划中,但仍然非常早期。

输入

  • 示例 key_codes 可以作为一个有用的工具,以查看库如何对各种按键做出反应。
  • 请注意,如果终端已注册快捷键,则它们可能不会被传输到应用程序。
  • 在启用了 Unicode 的终端仿真器中,UTF-8 输入应该工作得很好,但原始 Linux TTY 可能会更加挑剔。

贡献

替代方案

另请参阅 ratatui - 以及一个关于 比较的页面

依赖关系

~5–16MB
~208K SLoC