From 46d458d6839d81ae518945d922c95f95ce797db7 Mon Sep 17 00:00:00 2001 From: andrewwillowen <60939910+andrewwillowen@users.noreply.github.com> Date: Wed, 21 May 2025 20:19:35 -0500 Subject: [PATCH 1/2] Adds "less" inspired navigation to PagerApp --- src/rich_cli/pager.py | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/src/rich_cli/pager.py b/src/rich_cli/pager.py index 419d3a0..46b3ea1 100644 --- a/src/rich_cli/pager.py +++ b/src/rich_cli/pager.py @@ -71,6 +71,31 @@ async def on_key(self, event: events.Key) -> None: elif event.key == "ctrl+d": self.body.target_y += self.body.size.height // 2 self.body.animate("y", self.body.target_y, easing="out_cubic") + elif event.key == "f": + # page down + self.body.target_y += self.body.size.height + self.body.y = self.body.target_y + elif event.key == "b": + # page up + self.body.target_y -= self.body.size.height + self.body.y = self.body.target_y + elif event.key == "d": + # half page-down + self.body.target_y += self.body.size.height // 2 + self.body.y = self.body.target_y + elif event.key == "u": + # half page-up + self.body.target_y -= self.body.size.height // 2 + self.body.y = self.body.target_y + elif event.key == "1": + # jump to home ; shorthand for the "less" command "1 -> Shift+G" + self.body.target_x = self.body.target_y = 0 + self.body.x = self.body.y = 0 + elif event.key == "G": + # jump to end + self.body.target_x = 0 + self.body.target_y = self.body.window.virtual_size.height - self.body.size.height + self.body.x, self.body.y = self.body.target_x, self.body.target_y async def on_mount(self, event: events.Mount) -> None: self.body = body = ScrollView(auto_width=True) From 4e946378bc25c7c2209db7d81de0ce7c1a236217 Mon Sep 17 00:00:00 2001 From: andrewwillowen <60939910+andrewwillowen@users.noreply.github.com> Date: Wed, 21 May 2025 20:55:41 -0500 Subject: [PATCH 2/2] Correction, clarification of jump commands --- src/rich_cli/pager.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/rich_cli/pager.py b/src/rich_cli/pager.py index 46b3ea1..5ed93db 100644 --- a/src/rich_cli/pager.py +++ b/src/rich_cli/pager.py @@ -87,12 +87,14 @@ async def on_key(self, event: events.Key) -> None: # half page-up self.body.target_y -= self.body.size.height // 2 self.body.y = self.body.target_y - elif event.key == "1": - # jump to home ; shorthand for the "less" command "1 -> Shift+G" + elif event.key == "g" or event.key == "1" : + # jump to first line + # "g" is the "less" version; "1" is a shorthand for the "vi" command "1 -> Shift+G" self.body.target_x = self.body.target_y = 0 self.body.x = self.body.y = 0 elif event.key == "G": - # jump to end + # jump to last line + # Same shortcut in both "less" and "vi" self.body.target_x = 0 self.body.target_y = self.body.window.virtual_size.height - self.body.size.height self.body.x, self.body.y = self.body.target_x, self.body.target_y