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

tshell

TShell, a command tree framework with autocompletion and contextual help

5 releases

Uses old Rust 2015

0.2.2 Feb 2, 2018
0.2.1 Nov 20, 2017
0.1.3 Jun 13, 2017
0.1.2 May 22, 2017
0.1.1 Mar 30, 2017

#4 in #contextual

MIT license

33KB
752 lines

TShell

A command tree framework with autocompletion and contextual help based on rustyline.

Supported Platforms

  • Linux

Build

This project uses Cargo and Rust stable

cargo build --release

Example

#[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

You can use this package in your project by adding the following to your Cargo.toml:

[dependencies]
tshell = "^0.1"

Features

  • Command tree structure
  • Command completion
  • Contextual help
  • Command history
  • Context switching

Built in commands

Command Action
up Move a level, exit from current context
top Move to top context
exit or quit Exit the shell
help lists all the available commands
? contextual help
[Object] ? help for that object

ToDo

  • Take input from a file
  • Output to a file

Dependencies

~6.5MB
~130K SLoC