Sign in

    promptx

    Download zip
    Version
    0.1.3
    License
    Apache-2.0
    Last updated
    3 months ago
    Downloads
    91

    #PromptX

    PromptX 是一个用于 MoonBit 的命令行交互式提示库,底层由轻量、零依赖的 C 终端库 cprompt 驱动。它提供一组简洁的函数,帮助你在终端中收集文本、确认、单选、多选与密码等输入。

    #功能特性

    • Input — 单行文本输入,支持默认值占位
    • Confirm — 是 / 否确认
    • Select — 单选列表(方向键移动,回车确认)
    • Checkbox — 多选列表(空格勾选,回车确认)
    • Password — 密码输入(不回显)

    所有交互在原始终端模式下进行,支持方向键导航,退出后自动恢复终端状态。

    #安装

    将此库添加到你的 MoonBit 项目:

    moon add wangmingfa/promptx

    #快速开始

    import "wangmingfa/promptx"

    fn main {
    let name = @promptx.input("What is your name?", default_value="Guest")
    println("Hello, \{name}!")

    let ok = @promptx.confirm("Continue?")
    if ok {
    let color = @promptx.select("Pick a color:", ["Red", "Green", "Blue"])
    println("You picked: \{color}")
    }
    }

    #API 说明

    所有函数位于 @promptx 包下,均为同步调用,直接返回结果。

    #input

    单行文本输入。用户直接在提示后键入文本并按回车确认;若直接回车,则返回 default_value。

    pub fn input(message : String, default_value~ : String = "") -> String

    • message — 显示给用户的问题文本
    • default_value~ — 可选的默认值(默认空字符串)

    let name = @promptx.input("Your name?", default_value="Guest")

    #confirm

    是 / 否确认。返回 true 表示确认,false 表示否定或取消(Ctrl-C)。

    pub fn confirm(message : String, default_value~ : Bool = false) -> Bool

    • message — 显示给用户的问题文本
    • default_value~ — 可选的高亮默认值(默认 false,即 "No")

    if @promptx.confirm("Save changes?") {
    println("Saving...")
    }

    #select

    单选列表。使用上下方向键移动光标,回车确认,返回选中的选项字符串。

    交互键位:

    • ↑ / ↓ — 上下切换选项
    • ↵ Enter — 确认选择

    pub fn select(
    message : String,
    choices : Array[String],
    default_index~ : Int = 0,
    ) -> String

    • message — 显示给用户的问题文本
    • choices — 可选项数组
    • default_index~ — 默认选中的索引(默认 0)

    let color = @promptx.select("Pick a color:", ["Red", "Green", "Blue"])

    #checkbox

    多选列表。使用空格勾选 / 取消,回车确认,返回以逗号分隔的选中项字符串(如 "A,C")。

    交互键位:

    • ↑ / ↓ — 上下切换选项
    • 空格 — 勾选 / 取消当前项
    • a — 全选
    • i — 反选(已选变未选、未选变已选)
    • ↵ Enter — 确认

    pub fn checkbox(
    message : String,
    choices : Array[String],
    default_items~ : Array[String] = [],
    ) -> String

    • message — 显示给用户的问题文本
    • choices — 可选项数组
    • default_items~ — 默认已勾选项(默认空)

    let tops = @promptx.checkbox("Toppings:", ["Cheese", "Pepperoni", "Onion"])

    #password

    密码输入。输入内容不会回显到终端。

    pub fn password(message : String) -> String

    • message — 显示给用户的问题文本

    let pwd = @promptx.password("Enter password:")

    #本地运行示例

    仓库内置一个交互式示例,在项目根目录运行:

    moon run cmd/main

    按提示依次体验文本、确认、单选、多选与密码输入。

    #测试

    moon test

    #架构

    PromptX 采用双层结构:

    • promptx — MoonBit 顶层 API,提供面向用户的友好函数。
    • cprompt — 用 C 实现的终端交互内核(src/ 下的原生后端),负责原始模式切换、光标控制与各类控件的渲染。
    • ffi — 桥接层,将 MoonBit String 转换为 C 期望的 null 结尾 Bytes(@ffi.string_to_c_bytes)。

    #许可证

    Apache-2.0

    #贡献

    欢迎贡献代码!请提交 Pull Request。

    checkbox

    fn checkbox(message : String, choices : Array[String], default_items? : Array[String]) -> String

    多选列表。

    显示一个可逐项勾选(空格)的选项列表,按回车确认。

    参数

    • message : String - 显示给用户的问题文本
    • choices : Array[String] - 可选项数组
    • default_items~ : Array[String] - 默认已勾选项(默认空)

    返回值

    返回以逗号分隔的选中项字符串,例如 "A,C"。

    示例

    let tops = @promptx.checkbox("Toppings:", ["Cheese", "Pepperoni", "Onion"])

    confirm

    fn confirm(message : String, default_value? : Bool) -> Bool

    input

    fn input(message : String, default_value? : String) -> String

    单行文本输入。

    在终端中显示一个带默认值的灰色占位提示;用户直接在提示后输入文本, 按回车确认。若用户未输入任何内容直接回车,则返回 default_value。

    参数

    • message : String - 显示给用户的问题文本
    • default_value~ : String - 可选的默认值(默认空字符串)

    返回值

    返回用户输入的文本,或默认值。

    示例

    let name = @promptx.input("Your name?", default_value="Guest")

    password

    fn password(message : String) -> String

    密码输入。

    显示问题并收集输入,但输入内容不会回显到终端。

    参数

    • message : String - 显示给用户的问题文本

    返回值

    返回用户输入的密码字符串。

    示例

    let pwd = @promptx.password("Enter password:")

    select

    fn select(message : String, choices : Array[String], default_index? : Int) -> String

    单选列表。

    显示一个可上下移动光标选择的选项列表,按回车确认。

    参数

    • message : String - 显示给用户的问题文本
    • choices : Array[String] - 可选项数组
    • default_index~ : Int - 默认选中的索引(默认 0)

    返回值

    返回用户选中的选项字符串。

    示例

    let color = @promptx.select("Pick a color:", ["Red", "Green", "Blue"])

    Source Files