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'
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)
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()
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)