fzf-like terminal ui api for rust
Add this to your Cargo.toml
:
[dependencies]
termenu = "2.3.0" # use latest version
Or with no-pipe
feature, check Crate Features for more information.:
[dependencies]
termenu = { version = "2.3.0", features = ["no-pipe"], default-features = false }
This crate also provides a binary(like fzf
), you can install it with:
cargo install termenu
check examples folder
# basic example
cargo run --example basic
# complex example
cargo run --example complex
fn main() {
let mut menu = termenu::Menu::new().unwrap();
let mut item_list = Vec::new();
for i in 1..=10 {
item_list.push(termenu::Item::new(format!("{}th item", i).as_str(), i));
}
let selection = menu
.set_title("test selection:")
.add_list(item_list)
.select()
.unwrap();
if let Some(selection) = selection {
println!("You selected: {}", selection);
}
}
termenu binary is similar to fzf
, but it's quite simple and has fewer features.
It only reads from stdin and prints the selected item to stdout.
Use it like this:
# basic
echo '1st item\n2nd item\n3rd item' | termenu
# more complicated
echo $(echo '1st item\n2nd item\n3rd item' | termenu | grep item)
- no-pipe
This crate depends on
crossterm
, by default I enableduse-dev-tty
feature oncrossterm
to support pipe input.
If you don't need to use pipe input, or this feature causes some problems, you can disable it.
In that way,termenu
will only depend oncrossterm
without any features.
- Currently, termenu does not support window resizing.