From 1f08be256b79957d1e51ddd12e7feac4ea57f0a6 Mon Sep 17 00:00:00 2001 From: Christian Heller Date: Fri, 30 May 2025 17:12:23 +0200 Subject: [PATCH] Add basic scrolling. --- ircplom.py | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/ircplom.py b/ircplom.py index 2c55117..e35af9a 100755 --- a/ircplom.py +++ b/ircplom.py @@ -23,7 +23,9 @@ INPUT_PROMPT = ':' KEYBINDINGS = { 'KEY_BACKSPACE': 'prompt_backspace', - 'KEY_ENTER': 'prompt_enter' + 'KEY_ENTER': 'prompt_enter', + 'KEY_UP': 'scroll_up', + 'KEY_DOWN': 'scroll_down', } IRCSPEC_LINE_SEPARATOR = b'\r\n' @@ -356,6 +358,7 @@ class TuiLoop(Loop): self._term = term self._prompt = '' self._log_buffer: list[str] = [] + self._upscroll = 0 self._calc_and_draw_all() self._term.flush() super().__init__(*args, **kwargs) @@ -394,6 +397,16 @@ class TuiLoop(Loop): self._prompt = '' self._draw_prompt() + def _kb__scroll_up(self) -> None: + if len(self._log_buffer) > self._upscroll: + self._upscroll += 1 + self._draw_log() + + def _kb__scroll_down(self) -> None: + if self._upscroll > 1: + self._upscroll -= 1 + self._draw_log() + def _calc_and_draw_all(self) -> None: self._term.clear() self._term.calc_geometry() @@ -409,7 +422,8 @@ class TuiLoop(Loop): def _draw_log(self) -> None: temp_buffer = [''] * self._term.size.y - for line in self._log_buffer: + for line in self._log_buffer[:(-self._upscroll if self._upscroll + else None)]: temp_buffer += self._term.wrap(line) for i, line in enumerate(temp_buffer[-self._y_separator:]): self._term.write_yx(YX(i, 0), line) -- 2.30.2