返回资讯中心
外部精选
软件工程
#开发者实时流

Shelgon:用 Rust 构建交互式 REPL Shell 的框架

来源标题:Show HN: Shelgon: A Framework for Building Interactive REPL Shells in Rust

Shelgon 是一个用 Rust 构建交互式 REPL 应用和自定义 shell 的框架,提供类型安全的命令执行接口和基于 ratatui 的终端 UI。它基于 tokio 异步运行时,支持命令历史、Tab 补全、Ctrl+C/Ctrl+D 处理和多行 STDIN 输入。当前版本为 0.1.0。

Hacker News 最新cat-whisperer2026/11/7 · 今天5 分钟阅读

以下正文由 AI 翻译自 Hacker News 最新(原文版权归原站所有),可能存在偏差,重要内容请以原文为准。

Shelgon 是一个健壮的 Rust 框架,用于构建交互式 REPL(读取-求值-打印循环)应用和自定义 shell。它提供了灵活、类型安全的基础,并借助 ratatui 内置了终端 UI 能力。

🛡️ 类型安全的命令执行 —— 就像 Shelgon 的保护壳一样,你的命令被包裹在类型安全的接口中 🔄 异步运行时集成 —— 基于 tokio 构建,支持高性能异步操作 🎨 精美的 TUI —— 由 ratatui 驱动,支持样式和颜色 ⌨️ 丰富的输入处理 —— 完整的键盘交互支持,包括: 命令历史 光标移动 Tab 补全 Ctrl+C/Ctrl+D 处理 📝 自定义上下文支持 —— 使用你自己的上下文类型在命令之间保持状态 📥 STDIN 支持 —— 为需要多行输入的命令处理多行输入

安装

将 Shelgon 添加到你的 Cargo.toml:

[dependencies] shelgon = "0.1.0" tokio = { version = "1.43.0", features = ["full"] } anyhow = "1.0.95"

快速开始

创建一个简单的 echo shell:

use shelgon::{command, renderer};

struct EchoExecutor {}

impl command::New for EchoExecutor { fn new() -> anyhow::Result<(Self, ())> { Ok((Self {}, ())) } }

impl command::Execute for EchoExecutor { type Context = ();

fn prompt(&self, _: &Self::Context) -> String {
    "$".to_string()
}

fn execute(
    &self,
    _: &mut Self::Context,
    cmd: command::CommandInput,
) -> anyhow::Result<command::OutputAction> {
    Ok(command::OutputAction::Command(command::CommandOutput {
        prompt: cmd.prompt,
        command: cmd.command.clone(),
        stdin: cmd.stdin.unwrap_or_default(),
        stdout: vec![cmd.command],
        stderr: Vec::new(),
    }))
}

}

fn main() -> anyhow::Result<()> { let rt = tokio::runtime::Runtime::new()?; let app = renderer::App::<EchoExecutor>::new(rt)?; app.execute() }

演进指南:构建你自己的 Shell

下面介绍如何用 shelgon 构建一个龙一般的 shell:

查看 examples 目录,了解更高级的用法模式,包括:

欢迎贡献!请随时提交 Pull Request。在贡献之前,请:

本项目基于 MIT 许可证授权 —— 详情请参阅 LICENSE 文件。

正文由 探How 从来源站点 RSS 同步,内容未经改写;遇到排版缺失或需要图片、视频时请以原文为准。

打开原文
去社区讨论 →