19 个版本

新版本 0.6.0 2024 年 8 月 18 日
0.5.8 2024 年 4 月 6 日
0.5.7 2024 年 1 月 29 日
0.5.4 2023 年 11 月 29 日

377命令行界面 中排名

Download history 4/week @ 2024-05-18 1/week @ 2024-05-25 4/week @ 2024-06-29 64/week @ 2024-07-27 103/week @ 2024-08-17

167 每月下载量

MPL-2.0 许可证

85KB
2K SLoC

may clack

这是一个 npm 包 @clack/prompts 的 Rust 版本。

开发中

该项目仍在开发中

API 可能还会发生变化


lib.rs:

这是 https://npmjs.net.cn/package/@clack/prompts 的 Rust 版本

设置

您可以使用宏 intro!outro! 分别设置提示会话的开始和结束

use may_clack::{intro, outro};

intro!("intro");
// do stuff
outro!("outro");

取消

当用户取消一个问题时,您可以使用 cancel! 工具提供取消消息。

当取消时,将返回 error::ClackError::Cancelled,或者您可以使用 traits::IsCancel 特性扩展来检查它是否被取消。

所有可以返回 Cancelled Err 的输入类型也都有添加 .cancel 闭包的选项

use may_clack::{cancel, input, error::ClackError};

let text = input("todo").interact();
if let Err(ClackError::Cancelled) = text {
    cancel!("operation cancelled");
}
use may_clack::{cancel, input, traits::IsCancel};
let text = input("todo").interact();
if text.is_cancel() {
    cancel!("operation cancelled");
}

信息

如果您想在提示会话中写入消息,可以使用 info!warn!err! 工具。

use may_clack::{err, info, intro, outro, warn};

intro!("intro");
// do stuff
info!("info");
// do stuff
warn!("warn");
// do stuff
err!("err");
// do stuff
outro!("outro");

通用

共有6个组件: inputconfirmselectmulti_selectmulti_input

每种输入类型都返回一个结构体,允许您设置提示。
因为每个提示都需要一个消息,所以初始的

要在设置提示后实际提示用户,必须调用 .interact()

use may_clack::confirm;

let answer = confirm("Yes or No?").interact()?;

组件

输入

input::Input 组件接受一行文本。

use may_clack::input;

let answer = input("what is the meaning of life?").initial_value("42").interact()?;
println!("{:?}", answer);

确认

confirm::Confirm 组件接受是或否的回答。

use may_clack::confirm;

let answer = confirm("do you want to continue?").interact()?;
println!("answer {:?}", answer);

选择

select::Select 组件允许用户从选项列表中选择一个值。

use may_clack::select;

#[derive(Debug, Clone)]
enum Fruit {
    Mango,
    Peach,
    PassionFruit,
}

let fruit = select("pick a fruit")
    .option_hint(Fruit::Mango, "Mango", "The best one")
    .option(Fruit::Peach, "Peach")
    .option(Fruit::PassionFruit, "Passion fruit")
    .interact()?;
println!("fruit {:?}", fruit);

多选

multi_select::MultiSelect 组件允许用户从选项列表中选择多个值。

use may_clack::multi_select;

let toppings = multi_select("Choose your toppings")
    .option("fruits", "Dried fruits")
    .option("chocolate", "Chocolate chips")
    .option_hint("sauce", "Chocolate sauce", "it's warm")
    .interact()?;
println!("toppings {:?}", toppings);

多行输入

multi_input::MultiInput 组件接受多行文本。

use may_clack::multi_input;

let lines = multi_input("idk").interact()?;
println!("lines {:?}", lines);

依赖项

~6–16MB
~215K SLoC