use dracon_terminal_engine::core::terminal::Terminal;
use dracon_terminal_engine::input::event::{Event, KeyCode, KeyEvent};
use dracon_terminal_engine::input::parser::Parser;
use std::io::{self, Read, Write};
fn main() -> io::Result<()> {
println!("Preparing to enter Raw Mode...");
println!("Type 'q' to quit.");
std::thread::sleep(std::time::Duration::from_secs(1));
let stdout = io::stdout();
let mut term = Terminal::new(stdout)?;
write!(term, "\x1b[?1000h\x1b[?1006h\x1b[>1u\x1b[?1004h\x1b[?2004h")?;
write!(term, "\x1b[2J\x1b[H")?;
write!(term, "Input Debugger. Press keys or click mouse.\r\n")?;
term.flush()?;
let mut parser = Parser::new();
let stdin = io::stdin();
let mut handle = stdin.lock();
let mut buf = [0u8; 128];
loop {
let n = handle.read(&mut buf)?;
if n == 0 {
break;
}
for &byte in &buf[..n] {
if let Some(event) = parser.advance(byte) {
if let Event::Key(KeyEvent {
code: KeyCode::Char('q'),
..
}) = event
{
return Ok(());
}
write!(term, "{:?}\r\n", event)?;
}
}
term.flush()?;
}
Ok(())
}