
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。
以下正文由 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 同步,内容未经改写;遇到排版缺失或需要图片、视频时请以原文为准。