#autocomplete #linux-command #help #contextual #rustyline #tree #framework

tshell

TShell,一个具有自动完成和上下文帮助功能的命令树框架

5 个版本

使用旧的 Rust 2015

0.2.2 2018年2月2日
0.2.1 2017年11月20日
0.1.3 2017年6月13日
0.1.2 2017年5月22日
0.1.1 2017年3月30日

#4 in #contextual

MIT 许可证

33KB
752 代码行,不包括注释

TShell

基于 rustyline 的具有自动完成和上下文帮助功能的命令树框架

支持的平台

  • Linux

构建

本项目使用 Cargo 和 Rust 稳定版

cargo build --release

示例

#[macro_use]
extern crate tshell;

use tshell::{CommandTree, CommandResult};
use std::collections::HashMap;

fn world(args: HashMap<String, &str>, o_context: &mut Option<Context>, history: &HashMap<String, String>) -> CommandResult<Option<String>> {
    println!("World");
    Ok(None)
}

fn darkness(args: HashMap<String, &str>, o_context: &mut Option<Context>, history: &HashMap<String, String>) -> CommandResult<Option<String>> {
    if let Some(friend) = args.get("friend") {
        println!("Darkness, friend = {}", friend);
    }
    Ok(None)
}

fn main() {
    let mut root = shell_command_tree!{my_cli,
        "MyCLI",
        "0.1.0",
        [
            shell_command_node!{
                cmd: hello,
                txt_help: "Hello Root",
                nodes: [
                    shell_command_node!{
                        cmd: world,
                        txt_help: "World",
                        callback: world
                    },
                    shell_command_node!{
                        cmd: darkness,
                        txt_help: "Darkness",
                        callback: darkness,
                        args: [friend => true]
                    }
                ]
            }]
        };
        root.run();
}

crates.io

您可以通过在您的 Cargo.toml 中添加以下内容来在项目中使用此包

[dependencies]
tshell = "^0.1"

功能

  • 命令树结构
  • 命令完成
  • 上下文帮助
  • 命令历史
  • 上下文切换

内置命令

命令 操作
up 移动到上一层,退出当前上下文
top 移动到顶级上下文
exit 或 quit 退出 shell
help 列出所有可用命令
? 上下文帮助
[Object] ? 该对象的帮助信息

待办事项

  • 从文件读取输入
  • 输出到文件

依赖项

~6.5MB
~130K SLoC