2018-08-02 17:50:31 +03:00
|
|
|
# Terminal Wizardry
|
|
|
|
|
2019-05-28 05:51:10 +03:00
|
|
|
This is a rust crate that provides a number of support functions for
|
|
|
|
applications interested in either displaying data to a terminal or in building
|
|
|
|
a terminal emulator.
|
2018-08-02 17:50:31 +03:00
|
|
|
|
2019-05-28 05:51:10 +03:00
|
|
|
It is currently in active development and subject to fairly wild sweeping
|
|
|
|
changes.
|
2018-08-02 17:50:31 +03:00
|
|
|
|
|
|
|
Included functionality:
|
|
|
|
|
|
|
|
* `Surface` models a terminal display and its component `Cell`s
|
|
|
|
* Terminal attributes are aware of modern features such as
|
|
|
|
True Color, [Hyperlinks](https://gist.github.com/egmontkob/eb114294efbcd5adb1944c9f3cb5feda)
|
|
|
|
and will also support sixel and iterm style terminal graphics display.
|
|
|
|
* `Surface`s include a log of `Change`s and an API for consuming
|
|
|
|
and applying deltas. This is a powerful building block for
|
|
|
|
synchronizing screen instances.
|
|
|
|
* Escape sequence parser decodes inscrutable escape sequences
|
|
|
|
and gives them semantic meaning, making the code that uses
|
|
|
|
them clearer. The decoded escapes can be re-encoded, allowing
|
|
|
|
applications to start with the semantic meaning and emit
|
|
|
|
the appropriate escape sequence without embedding obscure
|
|
|
|
binary bytes.
|
|
|
|
* `Capabilities` allows probing for terminal capabilities
|
|
|
|
that may not be included in the system terminfo database,
|
|
|
|
and overriding them in an embedding application.
|
|
|
|
* `Terminal` trait provides an abstraction over unix style ttys
|
|
|
|
and Windows style console APIs. `Change`s from `Surface`
|
|
|
|
can be rendered to `Terminal`s. `Terminal`s allow decoding
|
|
|
|
mouse and keyboard inputs in both blocking or non-blocking
|
|
|
|
mode.
|
|
|
|
* `Widget` trait allows composition of UI elements at a higher level.
|
2019-05-28 05:51:10 +03:00
|
|
|
* `LineEditor` implements shell-like line editing functionality.
|
2018-08-02 17:50:31 +03:00
|
|
|
|
|
|
|
# Documentation
|
|
|
|
|
2019-05-28 05:51:10 +03:00
|
|
|
https://docs.rs/termwiz
|
2018-07-28 03:40:52 +03:00
|
|
|
|
2018-07-21 06:39:16 +03:00
|
|
|
## Windows
|
|
|
|
|
|
|
|
Testing via Wine:
|
|
|
|
|
|
|
|
```
|
|
|
|
sudo apt install gcc-mingw-w64-x86-64
|
|
|
|
rustup target add x86_64-pc-windows-gnu
|
|
|
|
cargo build --target=x86_64-pc-windows-gnu --example hello
|
|
|
|
```
|
|
|
|
|
|
|
|
Then, from an X session of some kind:
|
|
|
|
|
|
|
|
```
|
|
|
|
wineconsole cmd.exe
|
|
|
|
```
|
|
|
|
|
|
|
|
and from there you can launch the generated .exe files; they are found under `target/x86_64-pc-windows-gnu/debug`
|
|
|
|
|
|
|
|
|