crossterm_input/
crossterm_input.rs1use ratatui::crossterm::{
2 cursor::{Hide, Show},
3 event::{read, DisableMouseCapture, EnableMouseCapture, Event, KeyCode, KeyEvent},
4 execute,
5 terminal::{
6 disable_raw_mode, enable_raw_mode, EnterAlternateScreen, LeaveAlternateScreen,
7 },
8};
9use std::io::{stdout, Result, Write};
10use tui_input::backend::crossterm as backend;
11use tui_input::backend::crossterm::EventHandler;
12use tui_input::Input;
13
14fn main() -> Result<()> {
15 enable_raw_mode()?;
16 let stdout = stdout();
17 let mut stdout = stdout.lock();
18 execute!(stdout, Hide, EnterAlternateScreen, EnableMouseCapture)?;
19
20 let mut input: Input = "Hello ".into();
21 backend::write(&mut stdout, input.value(), input.cursor(), (0, 0), 15)?;
22 stdout.flush()?;
23
24 loop {
25 let event = read()?;
26
27 if let Event::Key(KeyEvent { code, .. }) = event {
28 match code {
29 KeyCode::Esc | KeyCode::Enter => {
30 break;
31 }
32 _ => {
33 if input.handle_event(&event).is_some() {
34 backend::write(
35 &mut stdout,
36 input.value(),
37 input.cursor(),
38 (0, 0),
39 15,
40 )?;
41 stdout.flush()?;
42 }
43 }
44 }
45 }
46 }
47
48 execute!(stdout, Show, LeaveAlternateScreen, DisableMouseCapture)?;
49 disable_raw_mode()?;
50 println!("{}", input);
51 Ok(())
52}