retronews

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

commit d40b2f1058f9bf0e1d1ef071fe8f6863961e363f
parent 04807bb44f161e29d1817daf584fa1b8472c3521
Author: luke8086 <55237178+luke8086@users.noreply.github.com>
Date:   Sun, 24 Jul 2022 22:11:24 +0000

Improve pager scrolling

Diffstat:
Mretronews.py | 39++++++++++++++++++++++++++++++---------
1 file changed, 30 insertions(+), 9 deletions(-)

diff --git a/retronews.py b/retronews.py @@ -190,17 +190,11 @@ def cmd_quit(app: AppState): def cmd_up(app: AppState) -> None: - if app.pager_visible: - app.pager_offset = max(0, app.pager_offset - 1) - else: - cmd_index_up(app) + cmd_pager_up(app) if app.pager_visible else cmd_index_up(app) def cmd_down(app: AppState) -> None: - if app.pager_visible: - app.pager_offset += 1 - else: - cmd_index_down(app) + cmd_pager_down(app) if app.pager_visible else cmd_index_down(app) def cmd_index_up(app: AppState) -> None: @@ -213,18 +207,45 @@ def cmd_index_down(app: AppState) -> None: app_select_message(app, list_get(app.messages, pos, app.selected_message)) +def cmd_pager_up(app: AppState) -> None: + app.pager_offset = max(0, app.pager_offset - 1) + + +def cmd_pager_down(app: AppState) -> None: + if app.selected_message is not None and app.layout.pager_height is not None: + app.pager_offset = min(app.pager_offset + 1, max(0, len(app.selected_message.lines) - app.layout.pager_height)) + + def cmd_page_up(app: AppState) -> None: + cmd_pager_page_up(app) if app.pager_visible else cmd_index_page_up(app) + + +def cmd_page_down(app: AppState) -> None: + cmd_pager_page_down(app) if app.pager_visible else cmd_index_page_down(app) + + +def cmd_index_page_up(app: AppState) -> None: pos = app.selected_message.index_position - app.layout.index_height if app.selected_message else 0 pos = max(pos, 0) app_select_message(app, list_get(app.messages, pos, app.selected_message)) -def cmd_page_down(app: AppState) -> None: +def cmd_index_page_down(app: AppState) -> None: pos = app.selected_message.index_position + app.layout.index_height if app.selected_message else 0 pos = min(pos, len(app.messages) - 1) app_select_message(app, list_get(app.messages, pos, app.selected_message)) +def cmd_pager_page_up(app: AppState) -> None: + if app.layout.pager_height is not None: + app.pager_offset = max(0, app.pager_offset - app.layout.pager_height) + + +def cmd_pager_page_down(app: AppState) -> None: + if (message := app.selected_message) is not None and (pager_height := app.layout.pager_height) is not None: + app.pager_offset = min(app.pager_offset + pager_height, max(0, len(message.lines) - pager_height)) + + def cmd_load_stories_page(app: AppState, sp: StoriesPage) -> None: app.stories_page = sp app_load_stories_page(app)