aboutsummaryrefslogtreecommitdiffstats
path: root/README.md
blob: aff1aaefa0ea657db3ce15f30ebb9dd69da95d52 (plain) (blame)
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
# textmode

`textmode` is a library for terminal interaction built on top of a real
terminal parsing library. It allows you to do arbitrary drawing operations on
an in-memory screen, and then update the visible terminal output to reflect the
in-memory screen via an optimized diff algorithm when you are finished. Being
built on a real terminal parsing library means that while normal curses-like
operations are available:

```rust
use textmode::Textmode;
let mut tm = textmode::Output::new().await?;
tm.clear();
tm.move_to(5, 5);
tm.set_fgcolor(textmode::color::RED);
tm.write_str("foo");
tm.refresh().await?;
```

you can also write data containing arbitrary terminal escape codes to the
output and they will also do the right thing:

```rust
tm.write(b"\x1b[34m\x1b[3;9Hbar\x1b[m");
tm.refresh().await?;
```

This module is split into two main parts: `Output` and `Input`. See the
documentation for those types for more details. Additionally, the `blocking`
module provides an equivalent interface with blocking calls instead of async.