#menu #tui #console #cartographer

程序+库 cartographer-rs

一个用于轻松创建简单、可搜索菜单的小型 TUI 包

3 个版本

0.1.3 2023 年 3 月 7 日
0.1.2 2023 年 3 月 7 日
0.1.1 2023 年 3 月 7 日

命令行界面 中排名第 424

MIT 许可证

1MB
467 行(不含注释)

Cartographer Logo

Cartographer-rs

Cartographer 是一个小型库,使用 Console 和宏将“加水即食”的 TUI 菜单引入到您的程序中。

利用宏的强大功能,您可以在不到 10 行代码内创建一个交互式菜单。

创建此包的主要原因是因为其他不那么特定于菜单的包,如 Dialoguer,不支持仅在搜索结果中显示的菜单选项。

请参阅示例……Cartographer 提供的一些示例

示例

(您可以在示例目录中找到更多示例)

一个多选菜单的基本示例


// ./examples/example_menu.rs
use cartographer::{menu, menu_item, MenuOptions};

fn main() {
    let options = MenuOptions::new().cursor('').selected_indicator('');

    let menu = menu!(
        "So you should try it!: ",
        options,
        [
            menu_item!("Using Cartographer", true, 1),
            menu_item!("Making TUI menus", true, 2),
            menu_item!("Is easy", true, 3),
            menu_item!("Read on for more!", false, 0, ["Ok"])
        ]
    );

    let usr_selection = menu.serve().unwrap().unwrap();
    println!("\nYou Selected:\n{:?}", usr_selection);
}

gif of the above example

如何使用

将其添加到项目的依赖项中

只需在您的项目目录中运行

cargo add cartographer

或在您的 Cargo.toml 中添加

"cartographer" = "the latest version"

创建菜单!

您有两种创建菜单的方式。

宏方式和手动方式。

宏方式在上面的示例中得到了演示。

手动方式的示例可以在示例目录中找到。手动方式使用构建器表示法和 cartographer::Menucartographer::MenuItem 结构体来手动构建菜单和菜单项。

此包处理的所有类型均为 String 类型。提示中的值和返回类型都是字符串,因此我建议使用类似于在示例中找到的解决方案来轻松地进行 match 操作。

但是返回的字符串将匹配提供的提示,包括特殊格式化!所以如果您决定按字符串进行匹配,请务必小心!

提供菜单服务

一旦在有效的 Menu 上调用 .serve(),所有菜单逻辑都会在幕后处理,并等待用户做出选择。

虽然使用这个库进行多线程可能是可行的(尽管未经验证),但请确保没有其他线程发送终端输出,否则将出现视觉问题。

配置

要配置菜单的外观,您可以使用 cartographer::MenuOptions 结构体和构建器语法来创建配置。

let options = MenuOptions::new().cursor(’➤’).selectedindicator(’✓’);

默认选项和附加选项可以在 MenuOptions 的文档中找到。

依赖项

~1.6–9MB
~48K SLoC