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
324 downloads per month
Used in 48 crates
(2 directly)
10KB
156 lines
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
.
- fzy (C)
- pick (C)
- fzf (Go)
- peco (Go)
- percol (Python)
- icepick (Rust)
- heatseeker (Rust)
- selecta (Ruby)
- hf (Haskell)
- dmenu (C, X11 GUI)
- rofi (C, X11 GUI)
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