#menu #command-line #ncurses #display #preview #icons #screen-side

youchoose

一个简单易用的命令行菜单

2 个版本

0.1.1 2021年6月3日
0.1.0 2021年6月2日

#19 in #preview

Download history 45/week @ 2024-03-30 6/week @ 2024-04-06 3/week @ 2024-04-20 4/week @ 2024-04-27 1/week @ 2024-05-04 2/week @ 2024-05-11 2/week @ 2024-05-18 8/week @ 2024-05-25 8/week @ 2024-06-01 8/week @ 2024-06-08 73/week @ 2024-06-15 129/week @ 2024-06-22 106/week @ 2024-06-29 73/week @ 2024-07-06 5/week @ 2024-07-13

319 下载/月

GPL-3.0 许可证

555KB
659

youchoose

crates.io

Rust 的一个简单易用的命令行菜单。

用法

要开始使用,您需要熟悉两种方法:将 Menu::new 作为参数接受一个 IteratorMenu::show,它初始化 ncurses 并显示菜单。

以下是一个最小示例,它在一个菜单中显示范围 0..100

use youchoose;

fn main() {
    let mut menu = youchoose::Menu::new(0..100);
    let choice = menu.show();
    // `choice` is a Vec<usize> containing the chosen indices
    println!("Index of the chosen item: {:?}", choice);
}

basic config

可以使用 ↓↑jk 来滚动,使用 return 来选择。使用 ESCq 来退出。

预览

youchoose::Menu 有一个预览功能,可以执行命令并在单独的窗格中显示结果。

use youchoose;

fn main(){
    let mut menu = youchoose::Menu::new(0..100).preview(multiples);
    let choice = menu.show();
    println!("Chose {:?}", choice);
    
}

fn multiples(num: i32) -> String {
    let mut buffer = String::new();
    for i in 0..20 {
        buffer.push_str(
            &format!("{} times {} is equal to {}!\n", num, i, num * i)
        );
    }
    buffer
}

preview

定制

让我们看看一个展示可用定制方法的示例。

use youchoose;

fn main() {
    let mut menu = youchoose::Menu::new(0..100)
        .preview(multiples)              // Sets the preview function
        .preview_pos(youchoose::ScreenSide::Bottom, 0.3)  // Sets the position of the preview pane
        .preview_label(" multiples ".to_string())    // Sets the text at the top of the preview pane
        .multiselect()                   // Allows multiple items to be selected
        .icon(":(")                      // Sets the default (not selected) icon for an item
        .selected_icon(":)")             // The icon for selected items
        .add_multiselect_key('s' as i32) // Bind the 's' key to multiselect
        .add_up_key('u' as i32)          // Bind the 'u' key to up
        .add_down_key('d' as i32)        // Bind the 'd' key to down
        .add_select_key('.' as i32);     // Bind the '.' key to select

    let choice = menu.show();
}

fn multiples(num: i32) -> String {
    // --- Snip ---
}

fully customized

依赖项