Still early but we can already extract most of the sequences. Device input has handy shortcuts for extracting some sense from the madness of ANSI keyboard and mouse.
While termit-ansi is part of a higher termit take over plot, this little fellow is meant to be usefull also on iny embedded devices where you would not go into tokio and async processing luxury.
Goals: [x] Portable. Since we touch no IO and only depend on core. [x] Be no_std by default - there's no allocator needed, only depending on core. [x] Handle both device and host sequences with the same approach. [x] Comprehensive device input coverage of user keys and mouse events with easy to use API. [ ] Easy to use API for host output, similar to device input. [ ] Well covered with tests, hard and stable API. [x] Nightly Rust, no special features. [x] Stable Rust, no special features.
Add this to your
[dependencies] termit-ansi = "0"
Note that the API is still unstable. Please use the latest release.
Look at the examples folder, specifically vt.rs and ansi.rs
You can either work with the parser which takes care of the stream
That's the easy termit ride.
For more control, you can employ the state machines directly:
Utf8Machine, and give handle
the stream yourself.
You'll initiate the parser with it's internal buffer. That's important because since there is no allocation, the parser would not be able to make it dynamically. It would have to use a fixed size one that would fit selected few.
You'll also need to implement a handler for the specific parser. It's not too tough. One method will do.
parser.parse(handler, input) with any new data coming in.
When your parsing is done, call
parser.close() and inspect the remaining data.
The parsers sometimes pass references to data in their buffers as part of the
handler call. This is to avoid allocation. You're either fine with that,
or need to copy the
&[u8] bits into some allocated space,
including forming new structures to hold that. The later is the task of
termit-io which will abstract from the ANSI madness and present some solid model.
A finite state machine tracks the state through a stream of input and derives actions from the input data These machines rememer only as much as requred to track the input correctly