Fui

Add CLI & form interface to your program. Docs: https://docs.rs/fui
Alternatives To Fui
Project NameStarsDownloadsRepos Using ThisPackages Using ThisMost Recent CommitTotal ReleasesLatest ReleaseOpen IssuesLicenseLanguage
Symfony Console Form360227a year ago33August 19, 20224mitPHP
Use Symfony forms for Console command input
Fui2721a year ago9June 10, 20221mitRust
Add CLI & form interface to your program. Docs: https://docs.rs/fui
Agda Mode Vscode154
a month ago44mitReScript
agda-mode on VS Code
Uibooster95
a month ago5gpl-3.0Java
🚀 Creates fast and easy dialogs for utility tools
Angular Reactive Forms Validate Submit84
4 years ago10TypeScript
React Progress Form77
6 years ago1JavaScript
Progress Form Example with React
Angular Forms Example75
5 years ago2TypeScript
Real world reactive form example
Ember Cli Form Data61
202 years ago19November 30, 202125mitJavaScript
Ember CLI addon that adds FormData file uploads to Ember Data
Rff Cli Example44
4 years ago2May 03, 20191JavaScript
An example of how to use 🏁 React Final Form in a CLI application with Ink
Nba Team App41
5 years ago2TypeScript
Demo app to show how to use nested reactive forms in Angular
Alternatives To Fui
Select To Compare


Alternative Project Comparisons
Readme

fui

Crate Crates.io CI MIT licensed

Add CLI & form interface to your program.

Basic example

cargo.toml

[dependencies]
fui = "2.1"

Using with clap (experimental)

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

Using without 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();
}

This will make the program automatically working in 2 modes:

  1. Ready for parsing CLI arguments, like here:

    $ ./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. Ready for getting user input from easy and discoverable TUI interface, like image below:

More examples

Here

Screens

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

Clap support

Implemented features

  • switch arguments
  • positional arguments
  • option arguments
  • global arguments
  • subcommands (single level)

To be implemented

TODO

  • find a solution for long help messages
  • ctrl+enter submits (#151)
  • handle unwraps

Ideas

  • .validator(OneOf || Regex::new("v\d+\.\d+\.\d+")).unwrap()?
  • support user's history?
  • checkboxes: automatic toggle on char(+alt)?
  • replace views::Autocomplete & views::Multiselect with a new implementation of Autocomplete

Release Steps

# create a new branch with updated files, similarly to the following
# https://github.com/xliiv/fui/commit/b44577541ee9b965b0b1e67169cac46222317901
git checkout -b vx.x.x  # where vx.x.x is e.g. v1.0.0
git commit -m "Bump version to vx.x.x"
# login as here https://doc.rust-lang.org/cargo/reference/publishing.html
cargo login
# check if branch is correct
cargo publish --dry-run
# if OK, then publish
cargo publish
# push the branch
git push origin vx.x.x
# merge the vx.x.x branch created a few steps before
# tag branch
git tag -a "vx.x.x" -m "Tag vx.x.x"
Popular Form Projects
Popular Command Line Projects
Popular User Interface Components Categories
Related Searches

Get A Weekly Email With Trending Projects For These Categories
No Spam. Unsubscribe easily at any time.
Command Line
Rust
Form
Tui
Ncurses