aboutsummaryrefslogtreecommitdiff
path: root/src/event.rs
blob: 4b0ac43cf4a35b37209ce5fec7c0c00573fa920b (plain) (blame)
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
55
56
57
58
59
60
use std::io;

use ratatui::crossterm::event::{self, Event, KeyCode, KeyModifiers};

use crate::app::App;

pub fn handle_event(app: &mut App) -> io::Result<bool> {
    if let Event::Key(key) = event::read()? {
        if !app.showing_search_window {
            match key.code {
                KeyCode::Char('q') => return Ok(true),
                KeyCode::Char('j') => app.list_state.select_next(),
                KeyCode::Char('k') => app.list_state.select_previous(),
                KeyCode::Char('/') => app.toggle_search_window(),
                KeyCode::Char('n') => app.next_search(),
                KeyCode::Char('N') => app.prev_search(),

                KeyCode::Char('d') => match key.modifiers {
                    KeyModifiers::CONTROL => app
                        .list_state
                        .select(Some(app.list_state.selected().unwrap_or(0) + 30)),

                    _ => return Ok(false),
                },

                KeyCode::Char('u') => match key.modifiers {
                    KeyModifiers::CONTROL => {
                        if let Some(selected) = app.list_state.selected() {
                            if selected < 30 {
                                app.list_state.select(Some(0));
                            } else {
                                app.list_state.select(Some(selected - 30))
                            }
                        }
                    }

                    _ => return Ok(false),
                },

                _ => return Ok(false),
            }
        } else {
            match key.code {
                KeyCode::Esc => app.toggle_search_window(),
                KeyCode::Enter => {
                    app.search();
                    app.toggle_search_window();
                    ()
                }
                _ => {
                    app.textarea.input_without_shortcuts(key);
                    app.search_found = Some(app.search());
                    ()
                }
            }
        }
    }

    Ok(false)
}