use std::io::{stdin, stdout, Result, Write};
use termion::cursor::{Hide, Show};
use termion::event::{Event, Key};
use termion::input::TermRead;
use termion::raw::IntoRawMode;
use termion::screen::IntoAlternateScreen;
use tui_input::backend::termion as backend;
use tui_input::backend::termion::EventHandler;
use tui_input::Input;
fn main() -> Result<()> {
let mut input: Input = "Hello ".into();
{
let stdin = stdin();
let mut stdout = stdout().into_raw_mode()?.into_alternate_screen()?;
write!(&mut stdout, "{}", Hide)?;
backend::write(&mut stdout, input.value(), input.cursor(), (0, 0), 15)?;
stdout.flush()?;
for evt in stdin.events() {
let evt = evt?;
if evt == Event::Key(Key::Esc) || evt == Event::Key(Key::Char('\n')) {
break;
}
if input.handle_event(&evt).is_some() {
backend::write(&mut stdout, input.value(), input.cursor(), (0, 0), 15)?;
stdout.flush()?;
}
}
write!(stdout, "{}", Show)?;
}
println!("{}", input);
Ok(())
}