1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
//! shli provides a few raw building blocks for building your own shell-like CLI.
//! It uses termion and should thus be compatible with all terminals termion supports.
//!
//! An example:
//! ```no_run
//! extern crate shli;
//! use shli::completion::Command;
//! use shli::{Prompt, Error};
//!
//! fn main() {
//! let mut p = Prompt::new(
//! "> ".to_string(),
//! vec![
//! Command::new("print"),
//! Command::new("echo"),
//! Command::new("cat").arg("--help"),
//! Command::new("exit"),
//! ],
//! );
//! loop {
//! // read_commandline does all the reading and tab completion
//! match p.read_commandline() {
//! Ok(line) => {
//! println!("");
//! match line.get(0).map(|s| s.as_str()) {
//! Some("exit") => break,
//! Some("print") | Some("echo") => {
//! if line.len() > 1 {
//! let output = line[1..]
//! .iter()
//! .map(|s| &**s)
//! .collect::<Vec<&str>>()
//! .join(" ");
//! println!("{}", output);
//! }
//! }
//! Some(cmd) => println!("Did not find '{}' command!", cmd),
//! None => {}
//! }
//! }
//! Err(Error::CtrlD) => {
//! println!("exit");
//! break;
//! }
//! Err(Error::CtrlC) => println!("\nCtrl+C pressed."),
//! Err(Error::IoError(e)) => println!("Reading error: {:?}", e),
//! }
//! }
//! }
//! ```
extern crate termion;
pub mod completion;
pub mod error;
pub mod prompt;
pub mod split;
pub use completion::Command;
pub use error::Error;
pub use prompt::Prompt;
pub use split::split;
#[cfg(test)]
mod tests;