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
61
62
|
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::Tab => app.cycle_current_tab(),
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)
}
|