ltrender 0.1.5

a diff based terminal rendering engine
Documentation
use std::{process::exit, thread};

use crossterm::event::{KeyCode, MouseButton};
use log::info;
use ltrender::{
    CrosstermEventManager, init_logger, init_terminal,
    input_handler::{
        hook::InputButton,
        manager::{MouseButtons, MouseMessage, SubscriptionMessage, TargetScreen},
    },
};

fn main() {
    init_terminal!();
    init_logger("./input_handler_test.log").unwrap();
    let (_input_manager, input_handler, screen_select_h) =
        CrosstermEventManager::new_with_select_sub(TargetScreen::None);
    let handle = thread::spawn(move || {
        macro_rules! try_send {
            ($message: expr) => {
                if let Err(e) = screen_select_h.send($message) {
                    info!("error sending select {:?}", e);
                    break;
                } else {
                };
            };
        }
        loop {
            if let Ok(sm) = screen_select_h.recv()
                && let SubscriptionMessage::Mouse {
                    msg,
                    screen: _screen,
                } = sm
                && let MouseMessage::Pressed(_) = msg
            {
                try_send!(Some(TargetScreen::Screen(1)));
            } else {
                try_send!(None);
            };
        }
    });
    let mut hook = input_handler.create_hook();

    hook.on_key_press(KeyCode::Char('q'), |_| exit(0)).unwrap();
    hook.on_key_press(KeyCode::Char('n'), |_| eprintln!("n"))
        .unwrap();

    hook.on_mouse_button_press(MouseButtons::Left, |m| eprintln!("{:?}", m))
        .unwrap();

    while !hook.is_pressed(InputButton::Mouse(MouseButton::Right)) {}
    while hook.is_pressed(InputButton::Mouse(MouseButton::Right)) {}
    handle.join().unwrap();
    restore_terminal().unwrap();
}