From 1af7309cdf103ff8d855715212c0c16803c55091 Mon Sep 17 00:00:00 2001 From: Kyosuke Fujimoto Date: Sun, 1 Feb 2026 15:08:14 +0900 Subject: [PATCH 1/3] Add ScrollDown/Up UserEvent --- src/event.rs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/event.rs b/src/event.rs index d81b5df..b15fa19 100644 --- a/src/event.rs +++ b/src/event.rs @@ -89,6 +89,8 @@ pub enum UserEvent { GoToRight, PageDown, PageUp, + ScrollDown, + ScrollUp, Confirm, Close, QuickFilter, @@ -130,6 +132,8 @@ impl UserEventMapper { (KeyEvent::new(KeyCode::Right, KeyModifiers::NONE), UserEvent::Right), (KeyEvent::new(KeyCode::Char('h'), KeyModifiers::NONE), UserEvent::Left), (KeyEvent::new(KeyCode::Left, KeyModifiers::NONE), UserEvent::Left), + (KeyEvent::new(KeyCode::Char('e'), KeyModifiers::CONTROL), UserEvent::ScrollDown), + (KeyEvent::new(KeyCode::Char('y'), KeyModifiers::CONTROL), UserEvent::ScrollUp), (KeyEvent::new(KeyCode::Enter, KeyModifiers::NONE), UserEvent::Confirm), (KeyEvent::new(KeyCode::Backspace, KeyModifiers::NONE), UserEvent::Close), (KeyEvent::new(KeyCode::Char('h'), KeyModifiers::CONTROL), UserEvent::Close), From 05a89b882a370b737ea49b8f8a916ac8703aa945 Mon Sep 17 00:00:00 2001 From: Kyosuke Fujimoto Date: Sun, 1 Feb 2026 15:08:40 +0900 Subject: [PATCH 2/3] Implement table scroll down/up action --- src/view/table.rs | 8 ++++++++ src/widget/table.rs | 24 ++++++++++++++++++++++++ 2 files changed, 32 insertions(+) diff --git a/src/view/table.rs b/src/view/table.rs index 4b53096..db6d774 100644 --- a/src/view/table.rs +++ b/src/view/table.rs @@ -207,6 +207,14 @@ impl TableView { self.table_state.select_prev_col(); self.table_state.update_table_state(); } + UserEvent::ScrollDown => { + self.table_state.scroll_down(); + self.table_state.update_table_state(); + } + UserEvent::ScrollUp => { + self.table_state.scroll_up(); + self.table_state.update_table_state(); + } UserEvent::QuickFilter => { self.start_filtering(); } diff --git a/src/widget/table.rs b/src/widget/table.rs index 1a1e158..0cb92bf 100644 --- a/src/widget/table.rs +++ b/src/widget/table.rs @@ -220,6 +220,30 @@ impl TableState { self.offset_col = self.total_cols - count; } + pub fn scroll_down(&mut self) { + if self.total_rows == 0 { + return; + } + if self.offset_row + self.height < self.total_rows { + self.offset_row += 1; + if self.selected_row < self.offset_row { + self.selected_row = self.offset_row; + } + } + } + + pub fn scroll_up(&mut self) { + if self.total_rows == 0 { + return; + } + if self.offset_row > 0 { + self.offset_row -= 1; + if self.selected_row - self.offset_row >= self.height { + self.selected_row = self.offset_row + self.height - 1; + } + } + } + pub fn select_index(&mut self, index: usize, offset_index: usize) { if index >= self.total_rows { return; From c813179abe8b93b484931d67a26d04b031823915 Mon Sep 17 00:00:00 2001 From: Kyosuke Fujimoto Date: Sun, 1 Feb 2026 15:13:14 +0900 Subject: [PATCH 3/3] Update table helps --- src/view/table.rs | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/view/table.rs b/src/view/table.rs index db6d774..583827b 100644 --- a/src/view/table.rs +++ b/src/view/table.rs @@ -322,6 +322,8 @@ fn build_helps( BuildHelpsItem::new(UserEvent::GoToBottom, "Select last row"), BuildHelpsItem::new(UserEvent::GoToLeft, "Select first column"), BuildHelpsItem::new(UserEvent::GoToRight, "Select last column"), + BuildHelpsItem::new(UserEvent::ScrollDown, "Scroll down"), + BuildHelpsItem::new(UserEvent::ScrollUp, "Scroll up"), BuildHelpsItem::new(UserEvent::Confirm, "Open selected item"), BuildHelpsItem::new(UserEvent::QuickFilter, "Filter items"), BuildHelpsItem::new(UserEvent::Expand, "Expand selected attribute"), @@ -345,6 +347,8 @@ fn build_helps( BuildHelpsItem::new(UserEvent::GoToBottom, "Select last row"), BuildHelpsItem::new(UserEvent::GoToLeft, "Select first column"), BuildHelpsItem::new(UserEvent::GoToRight, "Select last column"), + BuildHelpsItem::new(UserEvent::ScrollDown, "Scroll down"), + BuildHelpsItem::new(UserEvent::ScrollUp, "Scroll up"), BuildHelpsItem::new(UserEvent::Confirm, "Open selected item"), BuildHelpsItem::new(UserEvent::Reset, "Clear filter"), BuildHelpsItem::new(UserEvent::Expand, "Expand selected attribute"), @@ -392,6 +396,7 @@ fn build_short_helps( BuildShortHelpsItem::group(vec![UserEvent::Down, UserEvent::Up], "Select row", 6), BuildShortHelpsItem::group(vec![UserEvent::Left, UserEvent::Right], "Select col", 7), BuildShortHelpsItem::group(vec![UserEvent::GoToTop, UserEvent::GoToBottom], "Top/Bottom", 11), + BuildShortHelpsItem::group(vec![UserEvent::ScrollDown, UserEvent::ScrollUp], "Scroll", 12), BuildShortHelpsItem::single(UserEvent::Confirm, "Open", 2), BuildShortHelpsItem::single(UserEvent::QuickFilter, "Filter", 5), BuildShortHelpsItem::single(UserEvent::Expand, "Expand", 4), @@ -408,6 +413,7 @@ fn build_short_helps( BuildShortHelpsItem::group(vec![UserEvent::Down, UserEvent::Up], "Select row", 6), BuildShortHelpsItem::group(vec![UserEvent::Left, UserEvent::Right], "Select col", 7), BuildShortHelpsItem::group(vec![UserEvent::GoToTop, UserEvent::GoToBottom], "Top/Bottom", 11), + BuildShortHelpsItem::group(vec![UserEvent::ScrollDown, UserEvent::ScrollUp], "Scroll", 12), BuildShortHelpsItem::single(UserEvent::Confirm, "Open", 2), BuildShortHelpsItem::single(UserEvent::Reset, "Clear filter", 5), BuildShortHelpsItem::single(UserEvent::Expand, "Expand", 4),