9 个版本 (4 个稳定版本)
使用旧的 Rust 2015
2.1.0 | 2022 年 6 月 10 日 |
---|---|
2.0.0 | 2021 年 2 月 5 日 |
1.0.1 | 2019 年 7 月 26 日 |
1.0.0 | 2019 年 5 月 1 日 |
0.0.0 | 2018 年 2 月 6 日 |
#315 在 命令行界面
每月 57 次下载
125KB
3K SLoC
fui
为您的程序添加 CLI 和表单界面。
基本示例
cargo.toml
[dependencies]
fui = "2.1"
使用 clap
(实验性)
extern crate clap;
extern crate fui;
use clap::{App, Arg};
use fui::Fui;
use std::env;
// regular clap code
let app = App::new("some-app").arg(
Arg::with_name("some-switch")
.long("arg-long")
.help("arg-help"),
);
// extra fui code
let mut _arg_vec: Vec<String> = env::args().collect();
if _arg_vec.len() <= 1 {
_arg_vec = Fui::from(&app).get_cli_input();
}
// regular clap code
let matches = app.get_matches_from(_arg_vec);
不使用 clap
// Example showing imagined CLI app. with two actions
#[macro_use]
extern crate clap;
extern crate fui;
use fui::{Fui, Value};
use fui::form::FormView;
use fui::fields::Text;
fn hdlr(v: Value) {
println!("user input (from fn) {:?}", v);
}
fn main() {
Fui::new(crate_name!())
.action(
"action1",
"help for action1",
FormView::new().field(Text::new("action1-data").help("help for action1 data")),
|v| {
println!("user input (from closure) {:?}", v);
},
)
.action(
"action2",
"help for action2",
FormView::new().field(Text::new("action2-data").help("help for action2 data")),
hdlr,
)
.version(crate_version!())
.about(crate_description!())
.author(crate_authors!())
.run();
}
这将使程序能够自动在两种模式下运行
-
准备解析 CLI 参数,例如这里
$ ./app_basic -h app_basic 1.0.0 xliiv <[email protected]> An Example program which has CLI & form interface (TUI) USAGE: app_basic [SUBCOMMAND] FLAGS: -h, --help Prints help information -V, --version Prints version information SUBCOMMANDS: action1 help for action1 action2 help for action2 help Prints this message or the help of the given subcommand(s)
-
准备通过简单易用的 TUI 界面获取用户输入,如下面的图片所示
更多示例
屏幕截图
Clap 支持
实现的功能
- 开关参数
- 位置参数
- 选项参数
- 全局参数
- 子命令(单级)
待实现
- conflicts_with
- requires
- validators
- min/max/exact number of values for
- 位置参数
- 选项参数
- 分组
- 条件默认值
- 自定义分隔符
待办事项
- 找到解决长帮助消息的方法
- ctrl+enter 提交 (#151)
- 处理 unwraps
想法
.validator(OneOf|| Regex::new("v\d+\.\d+\.\d+")).unwrap()
?- 支持用户的历史记录吗?
- 复选框:字符(+alt)自动切换
- 用新的
Autocomplete
实现替换views::Autocomplete
和views::Multiselect
依赖关系
~8–11MB
~189K SLoC