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 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130
//!
//! [<img alt="github" src="https://img.shields.io/badge/github-workflow--rs-8da0cb?style=for-the-badge&labelColor=555555&color=8da0cb&logo=github" height="20">](https://github.com/workflow-rs/workflow-rs)
//! [<img alt="crates.io" src="https://img.shields.io/crates/v/workflow-terminal.svg?maxAge=2592000&style=for-the-badge&color=fc8d62&logo=rust" height="20">](https://crates.io/crates/workflow-terminal)
//! [<img alt="docs.rs" src="https://img.shields.io/badge/docs.rs-workflow--terminal-56c2a5?maxAge=2592000&style=for-the-badge&logo=docs.rs" height="20">](https://docs.rs/workflow-terminal)
//! <img alt="license" src="https://img.shields.io/crates/l/workflow-terminal.svg?maxAge=2592000&color=6ac&style=for-the-badge&logoColor=fff" height="20">
//! <img src="https://img.shields.io/badge/platform- native -informational?style=for-the-badge&color=50a0f0" height="20">
//! <img src="https://img.shields.io/badge/platform- wasm32/browser -informational?style=for-the-badge&color=50a0f0" height="20">
//!
//! [`workflow-terminal`] is a terminal shell that functions uniformly in native
//! Rust application command-line environment and in WASM-based browser environment.
//!
//! This is achieved by combining [`termion`](https://crates.io/crates/termion) and
//! [xterm.js](http://xtermjs.org) into a unified module and offering an intermediary
//! API that can interface with both libraries.
//!
//! You can initialize this crate from a regular bin project or a WASM project using
//! dedicated functions and provide a [`Cli`] trait implementing the command-line
//! interface that will receive input from the underlying terminal.
//!
//! Workflow Terminal example can be found at
//! [https://github.com/workflow-rs/workflow-terminal-examples](https://github.com/workflow-rs/workflow-terminal-examples)
//!
//! Loading in both native and WASM-browser application environment:
//! ```rust
//! use async_trait::async_trait;
//! use std::sync::Arc;
//! use workflow_terminal::Cli;
//! use workflow_terminal::Terminal;
//! use workflow_terminal::result::Result;
//!
//! struct ExampleCli;
//! #[async_trait]
//! impl Cli for ExampleCli {
//! async fn digest(self : Arc<Self>, _term: Arc<Terminal>, _cmd: String) -> Result<()> {
//! Ok(())
//! }
//! async fn complete(self : Arc<Self>, _term: Arc<Terminal>, _cmd: String) -> Result<Option<Vec<String>>> {
//! Ok(None)
//! }
//! fn prompt(&self) -> Option<String> {
//! Some("$ ".to_string())
//! }
//! }
//!
//! #[tokio::test]
//! # async fn test()->Result<()>{
//! let cli = Arc::new(ExampleCli{});
//! let term = Arc::new(Terminal::try_new(cli.clone(),"$ ")?);
//! term.init().await?;
//! term.writeln("Terminal example (type 'help' for list of commands)");
//! term.run().await?;
//! # Ok(())
//! # }
//!
//! ```
//!
//! Loading terminal in specific element
//! ```rust
//! use async_trait::async_trait;
//! use std::sync::Arc;
//! use workflow_terminal::Cli;
//! use workflow_terminal::Terminal;
//! use workflow_terminal::result::Result;
//! use workflow_terminal::{Options, TargetElement};
//!
//! #[derive(Clone)]
//! struct ExampleCli;
//! #[async_trait]
//! impl Cli for ExampleCli {
//! async fn digest(self : Arc<Self>, _term: Arc<Terminal>, _cmd: String) -> Result<()> {
//! Ok(())
//! }
//! async fn complete(self : Arc<Self>, _term: Arc<Terminal>, _cmd: String) -> Result<Option<Vec<String>>> {
//! Ok(None)
//! }
//! fn prompt(&self) -> Option<String> {
//! Some("$ ".to_string())
//! }
//! }
//!
//! # fn test(){
//!
//! let cli = Arc::new(ExampleCli{});
//! let options = Options::new()
//! .with_prompt("$ ")
//! .with_element(TargetElement::Id("terminal_container".to_string()));
//! //.with_element(TargetElement::Element(element));
//! //.with_element(TargetElement::Body);
//! //.with_element(TargetElement::TagName("body".to_string()));
//! let term = Arc::new(Terminal::try_new_with_options(cli.clone(), options).unwrap());
//!
//! # }
//! ```
//!
extern crate self as workflow_terminal;
pub mod clear;
pub mod cli;
pub mod crlf;
pub mod cursor;
pub mod error;
pub mod keys;
pub mod macros;
pub mod prelude;
pub mod result;
pub mod terminal;
pub mod unicode;
pub use cli::{Cli, Context, Handler, HandlerCli};
pub use crlf::CrLf;
pub use macros::*;
pub use result::Result;
pub use terminal::parse;
pub use terminal::Event;
pub use terminal::Modifiers;
pub use terminal::Options;
pub use terminal::TargetElement;
pub use terminal::Terminal;
pub use terminal::{Theme, ThemeOption};
pub use textwrap;
pub use unicode::UnicodeString;
cfg_if::cfg_if! {
if #[cfg(target_arch = "wasm32")] {
pub use terminal::{xterm, bindings};
} else {
pub use terminal::{disable_raw_mode,init_panic_hook};
}
}