diff --git a/squinnondation/hazel.py b/squinnondation/hazel.py index 832dc5a..a6d09c6 100644 --- a/squinnondation/hazel.py +++ b/squinnondation/hazel.py @@ -335,7 +335,14 @@ class Squirrel(Hazelnut): attrs |= curses.A_UNDERLINE if underline else 0 if strike: msg = "".join(c + "\u0336" for c in msg) - pad.addstr(y, x, msg, attrs) + + remaining_lines = curses.LINES - 3 - (y + x // (curses.COLS - 1)) + 1 + if remaining_lines > 0: + # Don't print the end of the line if it is too long + space_left_on_line = (curses.COLS - 2) - (x % (curses.COLS - 1)) + msg = msg[:space_left_on_line + max(0, (curses.COLS - 1) * (remaining_lines - 1))] + if msg: + pad.addstr(y + x // (curses.COLS - 1), x % (curses.COLS - 1), msg, attrs) return size def refresh_history(self) -> None: @@ -349,17 +356,21 @@ class Squirrel(Hazelnut): self.input_pad.resize(1, curses.COLS - 1) self.history_pad.erase() + + y_offset = 0 for i, msg in enumerate(self.history[max(0, self.last_line - curses.LINES + 3):self.last_line + 1]): + if i + y_offset > curses.LINES - 3: + break + if not re.match("<.*> .*", msg): msg = " " + msg match = re.match("<(.*)> (.*)", msg) nickname = match.group(1) msg = match.group(2) color_id = sum(ord(c) for c in nickname) % 6 + 1 - self.history_pad.addstr(i, 0, "<") - self.history_pad.addstr(i, 1, nickname, curses.A_BOLD | curses.color_pair(color_id + 1)) - self.history_pad.addstr(i, 1 + len(nickname), "> ") - self.print_markdown(self.history_pad, i, 3 + len(nickname), msg) + true_width = self.print_markdown(self.history_pad, i + y_offset, 0, f"<**{nickname}**> {msg}") + self.history_pad.addstr(i + y_offset, 1, nickname, curses.A_BOLD | curses.color_pair(color_id + 1)) + y_offset += true_width // (curses.COLS - 1) self.history_pad.refresh(0, 0, 0, 0, curses.LINES - 2, curses.COLS) def refresh_input(self) -> None: