termal 4.2.1

Rust library for fancy colored cli using ansi codes
Documentation
use std::io::{self, Read, Write, stdout};

use termal::{Result, codes, raw::enable_raw_mode, reset_terminal};

fn main() -> Result<()> {
    enable_raw_mode()?;
    print!("{}", codes::ENABLE_MOUSE_XY_ALL_TRACKING);
    _ = stdout().flush();

    start()?;

    reset_terminal();

    Ok(())
}

fn start() -> Result<()> {
    let mut stdin = io::stdin();
    let mut stdout = io::stdout();
    const CNT: usize = 100;
    let mut buf: [u8; CNT] = [0; CNT];

    loop {
        let cnt = stdin.read(&mut buf)?;
        stdout.flush()?;
        for byte in &buf[..cnt] {
            let chr = *byte as char;
            if chr == '\x03' {
                return Ok(());
            }
            if chr == '\x1b' {
                print!("ESC");
            } else if chr.is_ascii_control() || *byte > 0x7F {
                print!("0x{byte:02X}");
            } else {
                print!("{chr}");
            }
            print!(" ");
        }
        print!("\n\r");
        stdout.flush()?;
    }
}