# Terminal escapes
Utilities to control a ANSI-escapes compliant terminal device from a client application.
```rust
extern crate terminal_escapes;
use terminal_escapes::{
Sequence::*,
Attribute::*,
Color
};
fn main() {
println!(
"{}Hello {}World!{}",
SetAttributes(&[Foreground(Color::Red)]),
SetAttributes(&[Foreground(Color::Blue), Bright]),
SetAttributes(&[Default]),
);
}
```
For now the supported escape sequences are rather limited, and the library is
*not* extensively tested. I'll come back soon to this project to have a more exhaustive
implementation of the protocols. In the meantime, you are welcome to participate.
## Non-interactive sequences
If you only plan to use this crate to just format the output with colors,
then you can just use the `Sequence` enum to put escape sequences in the output
stream.
```rust
print!("{}", Sequence::SetAttributes(Background(Color::Green)));
```
## Interaction with the terminal
Escapes sequences can also be used to interact with the terminal just like
a regular client-server protocol.
In that case the setup, with the `Device` struct, is a but more complicated
since it will need to access the program input stream.
## Roadmap
Here are some elements I want to add in this crate in the future:
* Alternate screen buffer support.
* Non-buffered input.
* Asynchronous event handling for keyboard/mouse/resize/etc. events.
* And more.
## License
Licensed under either of
* Apache License, Version 2.0 ([LICENSE-APACHE](LICENSE-APACHE) or http://www.apache.org/licenses/LICENSE-2.0)
* MIT license ([LICENSE-MIT](LICENSE-MIT) or http://opensource.org/licenses/MIT)
at your option.
### Contribution
Unless you explicitly state otherwise, any contribution intentionally submitted
for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any
additional terms or conditions.