single_line_input/
single-line-input.rs

1use cool_rust_input::{
2    set_terminal_line, CoolInput, CustomInputHandler, HandlerContext, InputTransform,
3    KeyPressResult,
4};
5use crossterm::{
6    event::{Event, KeyCode},
7    queue,
8    style::{Color, SetForegroundColor},
9};
10use std::io::stdout;
11
12struct MyHandler;
13impl CustomInputHandler for MyHandler {
14    fn get_input_transform(&mut self, ctx: HandlerContext) -> InputTransform {
15        let size = (ctx.terminal_size.0 - 1, ctx.terminal_size.1 - 2);
16        let offset = (1, 2);
17        InputTransform { size, offset }
18    }
19    fn after_draw_text(&mut self, _: HandlerContext) {
20        // we'll use this function to display a title text
21
22        let _ = queue!(stdout(), SetForegroundColor(Color::Green));
23        let _ = set_terminal_line("hello and welcome to my command prompt!", 0, 0, true);
24        let _ = set_terminal_line(">", 0, 2, false);
25    }
26    fn handle_key_press(&mut self, key: &Event, _: HandlerContext) -> KeyPressResult {
27        // Make Enter stop the input
28        if let Event::Key(key_event) = key {
29            if key_event.kind == crossterm::event::KeyEventKind::Press {
30                if let KeyCode::Enter = key_event.code {
31                    return KeyPressResult::Stop;
32                }
33            }
34        }
35        KeyPressResult::Continue
36    }
37}
38
39fn main() -> Result<(), std::io::Error> {
40    let mut my_input = CoolInput::new(MyHandler, 0);
41    my_input.listen()?;
42    println!("your input was: '{}'", my_input.text_data.text);
43    Ok(())
44}