use ratatui::crossterm::{
cursor::{Hide, Show},
event::{read, DisableMouseCapture, EnableMouseCapture, Event, KeyCode, KeyEvent},
execute,
terminal::{
disable_raw_mode, enable_raw_mode, EnterAlternateScreen, LeaveAlternateScreen,
},
};
use std::io::{stdout, Result, Write};
use tui_input::backend::crossterm as backend;
use tui_input::backend::crossterm::EventHandler;
use tui_input::Input;
fn main() -> Result<()> {
enable_raw_mode()?;
let stdout = stdout();
let mut stdout = stdout.lock();
execute!(stdout, Hide, EnterAlternateScreen, EnableMouseCapture)?;
let mut input: Input = "Hello ".into();
backend::write(&mut stdout, input.value(), input.cursor(), (0, 0), 15)?;
stdout.flush()?;
loop {
let event = read()?;
if let Event::Key(KeyEvent { code, .. }) = event {
match code {
KeyCode::Esc | KeyCode::Enter => {
break;
}
_ => {
if input.handle_event(&event).is_some() {
backend::write(
&mut stdout,
input.value(),
input.cursor(),
(0, 0),
15,
)?;
stdout.flush()?;
}
}
}
}
}
execute!(stdout, Show, LeaveAlternateScreen, DisableMouseCapture)?;
disable_raw_mode()?;
println!("{}", input);
Ok(())
}