3 个版本
0.1.3 | 2023 年 3 月 7 日 |
---|---|
0.1.2 | 2023 年 3 月 7 日 |
0.1.1 | 2023 年 3 月 7 日 |
在 命令行界面 中排名第 424
1MB
467 行(不含注释)
Cartographer-rs
Cartographer 是一个小型库,使用 Console 和宏将“加水即食”的 TUI 菜单引入到您的程序中。
利用宏的强大功能,您可以在不到 10 行代码内创建一个交互式菜单。
创建此包的主要原因是因为其他不那么特定于菜单的包,如 Dialoguer,不支持仅在搜索结果中显示的菜单选项。
示例
(您可以在示例目录中找到更多示例)
一个多选菜单的基本示例
// ./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);
}
如何使用
将其添加到项目的依赖项中
只需在您的项目目录中运行
cargo add cartographer
或在您的 Cargo.toml
中添加
"cartographer" = "the latest version"
创建菜单!
您有两种创建菜单的方式。
宏方式和手动方式。
宏方式在上面的示例中得到了演示。
手动方式的示例可以在示例目录中找到。手动方式使用构建器表示法和 cartographer::Menu
和 cartographer::MenuItem
结构体来手动构建菜单和菜单项。
此包处理的所有类型均为 String
类型。提示中的值和返回类型都是字符串,因此我建议使用类似于在示例中找到的解决方案来轻松地进行 match
操作。
但是返回的字符串将匹配提供的提示,包括特殊格式化!所以如果您决定按字符串进行匹配,请务必小心!
提供菜单服务
一旦在有效的 Menu
上调用 .serve()
,所有菜单逻辑都会在幕后处理,并等待用户做出选择。
虽然使用这个库进行多线程可能是可行的(尽管未经验证),但请确保没有其他线程发送终端输出,否则将出现视觉问题。
配置
要配置菜单的外观,您可以使用 cartographer::MenuOptions
结构体和构建器语法来创建配置。
let options = MenuOptions::new().cursor(’➤’).selectedindicator(’✓’);
默认选项和附加选项可以在 MenuOptions
的文档中找到。
依赖项
~1.6–9MB
~48K SLoC