diff --git a/src/rich_cli/pager.py b/src/rich_cli/pager.py index 419d3a0..5ed93db 100644 --- a/src/rich_cli/pager.py +++ b/src/rich_cli/pager.py @@ -71,6 +71,33 @@ 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 == "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 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 async def on_mount(self, event: events.Mount) -> None: self.body = body = ScrollView(auto_width=True)