retronews

a featureful fork of the luke8086/retronews hn+lobste.rs tui
Log | Files | Refs | README | LICENSE

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:
Mretronews.py | 24++++++++++++++++++++++--
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)