#forms #tui #ncurses #termion #cli

fui

为您的程序添加 CLI 和表单界面

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命令行界面

Download history 5/week @ 2024-03-07 3/week @ 2024-03-14 7/week @ 2024-03-28 4/week @ 2024-04-04

每月 57 次下载

MIT 许可证

125KB
3K SLoC

fui

docs.rs CI MIT licensed

为您的程序添加 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);

asciicast

不使用 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();
}

这将使程序能够自动在两种模式下运行

  1. 准备解析 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)
    
  2. 准备通过简单易用的 TUI 界面获取用户输入,如下面的图片所示

更多示例

这里

屏幕截图

app_basic.rs example app_ln_like.rs example app_tar_like.rs example

Clap 支持

实现的功能

  • 开关参数
  • 位置参数
  • 选项参数
  • 全局参数
  • 子命令(单级)

待实现

待办事项

  • 找到解决长帮助消息的方法
  • ctrl+enter 提交 (#151)
  • 处理 unwraps

想法

  • .validator(OneOf|| Regex::new("v\d+\.\d+\.\d+")).unwrap()?
  • 支持用户的历史记录吗?
  • 复选框:字符(+alt)自动切换
  • 用新的 Autocomplete 实现替换 views::Autocompleteviews::Multiselect

依赖关系

~8–11MB
~189K SLoC