use crossterm::event::{KeyCode, KeyEvent};
use crate::app::App;
pub fn handle_key(app: &mut App, key: KeyEvent) {
match key.code {
KeyCode::Char('j') => {
app.tab_mut().diff_scroll = app.tab().diff_scroll.saturating_add(1);
}
KeyCode::Char('k') => {
app.tab_mut().diff_scroll = app.tab().diff_scroll.saturating_sub(1);
}
KeyCode::Char('g') => {
app.tab_mut().diff_scroll = 0;
}
KeyCode::Char('G') => {
let total_lines = app
.tab()
.selected_diff
.as_ref()
.map(|d| d.hunks.iter().map(|h| h.lines.len() as u16).sum::<u16>())
.unwrap_or(0);
app.tab_mut().diff_scroll = total_lines.saturating_sub(1);
}
KeyCode::PageDown | KeyCode::Char('d') => {
app.tab_mut().diff_scroll = app.tab().diff_scroll.saturating_add(20);
}
KeyCode::PageUp | KeyCode::Char('u') => {
app.tab_mut().diff_scroll = app.tab().diff_scroll.saturating_sub(20);
}
KeyCode::Char('h') => {
app.prev_diff_file();
}
KeyCode::Char('l') => {
app.next_diff_file();
}
_ => {}
}
}