From 9f4a1e86cd6d59a92b0843511277b13d2f7f27d2 Mon Sep 17 00:00:00 2001 From: Robin Avery Date: Sat, 2 Mar 2024 20:47:54 -0500 Subject: [PATCH] objdiff-cli diff: Reduce duplicate key event code (#51) --- objdiff-cli/src/cmd/diff.rs | 35 +++++++++++++++++------------------ 1 file changed, 17 insertions(+), 18 deletions(-) diff --git a/objdiff-cli/src/cmd/diff.rs b/objdiff-cli/src/cmd/diff.rs index 15e3075..3adee7d 100644 --- a/objdiff-cli/src/cmd/diff.rs +++ b/objdiff-cli/src/cmd/diff.rs @@ -408,39 +408,28 @@ impl FunctionDiffUi { // Quit KeyCode::Esc | KeyCode::Char('q') => return FunctionDiffResult::Break, // Page up - KeyCode::PageUp => { - self.scroll_y = self.scroll_y.saturating_sub(self.per_page); - self.redraw = true; - } + KeyCode::PageUp => self.page_up(false), // Page up (shift + space) KeyCode::Char(' ') if event.modifiers.contains(KeyModifiers::SHIFT) => { - self.scroll_y = self.scroll_y.saturating_sub(self.per_page); - self.redraw = true; + self.page_up(false) } // Page down - KeyCode::Char(' ') | KeyCode::PageDown => { - self.scroll_y += self.per_page; - self.redraw = true; - } + KeyCode::Char(' ') | KeyCode::PageDown => self.page_down(false), // Page down (ctrl + f) KeyCode::Char('f') if event.modifiers.contains(KeyModifiers::CONTROL) => { - self.scroll_y += self.per_page; - self.redraw = true; + self.page_down(false) } // Page up (ctrl + b) KeyCode::Char('b') if event.modifiers.contains(KeyModifiers::CONTROL) => { - self.scroll_y = self.scroll_y.saturating_sub(self.per_page); - self.redraw = true; + self.page_up(false) } // Half page down (ctrl + d) KeyCode::Char('d') if event.modifiers.contains(KeyModifiers::CONTROL) => { - self.scroll_y += self.per_page / 2; - self.redraw = true; + self.page_down(true) } // Half page up (ctrl + u) KeyCode::Char('u') if event.modifiers.contains(KeyModifiers::CONTROL) => { - self.scroll_y = self.scroll_y.saturating_sub(self.per_page / 2); - self.redraw = true; + self.page_up(true) } // Scroll down KeyCode::Down | KeyCode::Char('j') => { @@ -517,6 +506,16 @@ impl FunctionDiffUi { FunctionDiffResult::Continue } + fn page_up(&mut self, half: bool) { + self.scroll_y = self.scroll_y.saturating_sub(self.per_page / if half { 2 } else { 1 }); + self.redraw = true; + } + + fn page_down(&mut self, half: bool) { + self.scroll_y += self.per_page / if half { 2 } else { 1 }; + self.redraw = true; + } + fn print_sym( &self, out: &mut Text,