complex/
complex.rs

1use termenu::*;
2
3macro_rules! quit_now {
4    ($content:expr, $($arg:tt)*) => {
5        eprintln!($content, $($arg)*);
6        std::process::exit(1);
7    };
8}
9
10fn main() {
11    let mut menu = Menu::new().unwrap_or_else(|e| {
12        quit_now!("Error: {}", e);
13    });
14
15    // build item list
16    let mut item_list = Vec::new();
17    for i in 1..=100 {
18        item_list.push(Item::new(format!("{i}th item").as_str(), i));
19    }
20
21    // build colorscheme, you can skip this step to use the default colorscheme
22    // NOTE: sometimes your terminal might not support all the colors, so you may need to adjust
23    // the colorscheme
24    let mut colorscheme = termenu::ColorScheme::default();
25    colorscheme
26        .set_title_style(
27            FontStyle::default()
28                .set_shape(FontShape::Bold | FontShape::Underline)
29                .set_fg_color(colored::Color::Green)
30                .build(),
31        )
32        .set_query_style(FontStyle::default().set_shape(FontShape::Italic).build())
33        .set_chosen_ln_style(
34            FontStyle::default()
35                .set_shape(FontShape::Underline)
36                .set_fg_color(colored::Color::Black)
37                .set_bg_color_256((215, 255, 0))
38                .build(),
39        )
40        .set_more_tag_style(
41            FontStyle::default()
42                .set_fg_color(colored::Color::Magenta)
43                .build(),
44        );
45
46    // run
47    let selection = menu
48        .set_title("test selection:")
49        .show_end_tag(true)
50        .set_max_height(0.3)
51        .set_colorscheme(colorscheme)
52        .add_list(item_list)
53        .select() // this is the menu entry
54        .unwrap_or_else(|e| {
55            quit_now!("Error: {}", e);
56        });
57
58    // handle selection
59    if let Some(selection) = selection {
60        println!("You selected: {selection}");
61    } else {
62        println!("You didn't select anything");
63    }
64}