gitkraft_tui/features/diff/
events.rs1use crossterm::event::{KeyCode, KeyEvent};
2
3use crate::app::App;
4
5pub fn handle_key(app: &mut App, key: KeyEvent) {
7 match key.code {
8 KeyCode::Char('j') => {
10 app.tab_mut().diff_scroll = app.tab().diff_scroll.saturating_add(1);
11 }
12 KeyCode::Char('k') => {
14 app.tab_mut().diff_scroll = app.tab().diff_scroll.saturating_sub(1);
15 }
16 KeyCode::Char('g') => {
18 app.tab_mut().diff_scroll = 0;
19 }
20 KeyCode::Char('G') => {
22 let total_lines = app
24 .tab()
25 .selected_diff
26 .as_ref()
27 .map(|d| d.hunks.iter().map(|h| h.lines.len() as u16).sum::<u16>())
28 .unwrap_or(0);
29 app.tab_mut().diff_scroll = total_lines.saturating_sub(1);
30 }
31 KeyCode::PageDown | KeyCode::Char('d') => {
33 app.tab_mut().diff_scroll = app.tab().diff_scroll.saturating_add(20);
34 }
35 KeyCode::PageUp | KeyCode::Char('u') => {
37 app.tab_mut().diff_scroll = app.tab().diff_scroll.saturating_sub(20);
38 }
39 KeyCode::Char('h') => {
41 app.prev_diff_file();
42 }
43 KeyCode::Char('l') => {
45 app.next_diff_file();
46 }
47 _ => {}
48 }
49}