#user-input #console #fuzzy-finder #ui #tui #terminal

interactor

A library for simple (usually command-line) user interaction

4 releases

0.1.3 Oct 1, 2022
0.1.2 Aug 5, 2022
0.1.1 Feb 1, 2016
0.1.0 Nov 12, 2015

#482 in Command-line interface

Download history 95/week @ 2024-07-22 166/week @ 2024-07-29 134/week @ 2024-08-05 111/week @ 2024-08-12 100/week @ 2024-08-19 236/week @ 2024-08-26 65/week @ 2024-09-02 138/week @ 2024-09-09 93/week @ 2024-09-16 169/week @ 2024-09-23 72/week @ 2024-09-30 19/week @ 2024-10-07 115/week @ 2024-10-14 59/week @ 2024-10-21 66/week @ 2024-10-28 84/week @ 2024-11-04

324 downloads per month
Used in 48 crates (2 directly)

Unlicense

10KB
156 lines

crates.io API Docs unlicense

interactor

A Rust library for simple (usually command-line) user interaction.

  • Reading input from the console with a callback for each byte (e.g. for displaying colorhash256 for a password)
  • Selecting an item from a list using an external menu program (usually a fuzzy finder) or a built-in simple menu
  • Selecting a file using the "item from a list" thing above

Menu program?

A program that accepts a newline-separated list of items on stdin, presents a UI to the user (directly on /dev/tty if it's a CLI; can also be a GUI), and outputs the selected item on stdout.

You should let the users of your application pick their own favorite tool as a config option.
I propose the $MENU environment variable, like $EDITOR, as a place to look for user preference.

Usage

extern crate interactor;

use std::io::Write;
use interactor::*;

fn main() {
    let read_result = read_from_tty(|buf, b, tty| {
        tty.write(&format!("({:?} | {})\n", buf, b).into_bytes());
    }, false, false).unwrap();
    println!("Read: {}", String::from_utf8(read_result).unwrap());

    let chosen_ext = pick_from_list(default_menu_cmd().as_mut(), &["first", "second"], "Selection: ").unwrap();
    println!("Congratulations, you chose '{}'!!", chosen_ext);
}

License

This is free and unencumbered software released into the public domain.
For more information, please refer to the UNLICENSE file or unlicense.org.

Dependencies

~120KB