commit 23eefdc923360f5e320002a6517d55515f546c57
parent fd713231ae919c40516afcf13982de48864998a2
Author: luke8086 <55237178+luke8086@users.noreply.github.com>
Date: Tue, 12 Jul 2022 21:52:20 +0000
Handle page-up/page-down keys
Diffstat:
1 file changed, 22 insertions(+), 2 deletions(-)
diff --git a/retronews.py b/retronews.py
@@ -79,6 +79,20 @@ def cmd_down(app: AppState) -> None:
app.selected_message = list_get(app.messages, pos, app.selected_message)
+def cmd_page_up(app: AppState) -> None:
+ index_height = app_get_index_height(app)
+ pos = app.selected_message.index_position - index_height if app.selected_message else 0
+ pos = max(pos, 0)
+ app.selected_message = list_get(app.messages, pos, app.selected_message)
+
+
+def cmd_page_down(app: AppState) -> None:
+ index_height = app_get_index_height(app)
+ pos = app.selected_message.index_position + index_height if app.selected_message else 0
+ pos = min(pos, len(app.messages) - 1)
+ app.selected_message = list_get(app.messages, pos, app.selected_message)
+
+
def cmd_open(app: AppState) -> None:
app.pager_visible = app.selected_message is not None
@@ -98,6 +112,8 @@ KEY_BINDINGS = {
ord("x"): cmd_close,
curses.KEY_UP: cmd_up,
curses.KEY_DOWN: cmd_down,
+ curses.KEY_PPAGE: cmd_page_up,
+ curses.KEY_NPAGE: cmd_page_down,
}
@@ -121,6 +137,10 @@ def app_render_pager(app: AppState, top: int, height: int) -> None:
app.screen.insstr(i + top, 0, line[: curses.COLS].ljust(curses.COLS))
+def app_get_index_height(app: AppState) -> int:
+ return ((curses.LINES - 2) // 3) if app.pager_visible else curses.LINES - 2
+
+
def app_render_index_row(app: AppState, row: int, message: Message) -> None:
cursor = "->" if message == app.selected_message else " "
app.screen.insstr(row, 0, f"{cursor} [{message.date}] [{message.author[:10]:10}] {message.title}")
@@ -149,8 +169,8 @@ def app_render(app: AppState) -> None:
app.screen.erase()
index_top = 1
- index_bottom = ((curses.LINES - 2) // 3) if app.pager_visible else curses.LINES - 2
- index_height = index_bottom - index_top + 1
+ index_height = app_get_index_height(app)
+ index_bottom = index_top + index_height - 1
app_render_menus(app, index_top, index_bottom)
app_render_index(app, index_top, index_height)