1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
use crossterm::{
cursor::{Hide, Show},
event::{read, DisableMouseCapture, EnableMouseCapture, Event, KeyCode, KeyEvent},
execute,
terminal::{
disable_raw_mode, enable_raw_mode, EnterAlternateScreen, LeaveAlternateScreen,
},
Result,
};
use std::io::{stdout, 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()?;
match event {
Event::Key(KeyEvent { code, .. }) => 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(())
}