#read-line #interactive #toolkit #building #command-line #own #input

yanked promptio

用于构建您自己的交互式命令行工具的工具包

0.1.0 2022年5月1日

#62 in #read-line

MIT 协议

67KB
1.5K SLoC

promptio

.github/workflows/promptio.yml

Rust 中构建自己的交互式命令行工具的工具包,利用 crossterm

入门

将包放入您的 Cargo.toml

[dependencies]
promptio = "0.1.0"

特性

  • Readline
    • 提供接收和显示用户输入的行
    • 掩码、切换插入/覆盖模式以及建议
  • Select
    • 提供选择框以选择项目
  • 自定义
    • 允许您定义自己的命令行应用程序。
    • 请参阅 examples/advanced 获取更多具体示例。

示例

Readline

use promptio::{build::Builder, readline, Result};

fn main() -> Result<()> {
    let mut p = readline::Builder::default().build()?;
    loop {
        let (line, exit_code) = p.run()?;
        if exit_code == 0 {
            println!("result: {:?}", line);
        } else {
            return Ok(());
        }
    }
}

Select

use crossterm::style;
use promptio::{
    build::Builder,
    edit::{Register, SelectBox},
    select, Result,
};

fn main() -> Result<()> {
    let mut selectbox = Box::new(SelectBox::default());
    selectbox.register_all((0..100).map(|v| v.to_string()).collect::<Vec<String>>());
    let mut p = select::Builder::default()
        .title("Q: What number do you like?")
        .title_color(style::Color::DarkGreen)
        .selectbox(selectbox)
        .build()?;
    let (line, exit_code) = p.run()?;
    if exit_code == 0 {
        println!("result: {:?}", line)
    }
    Ok(())
}

依赖项

~2–12MB
~77K SLoC