home · contact · privacy
Add basic line-level highlighting. master
authorChristian Heller <c.heller@plomlompom.de>
Sat, 4 Oct 2025 12:24:53 +0000 (14:24 +0200)
committerChristian Heller <c.heller@plomlompom.de>
Sat, 4 Oct 2025 12:24:53 +0000 (14:24 +0200)
src/ircplom/tui_base.py

index 5d869fb3d14e5248616ed6a7a317264a9d69217b..ce26c955b273b57f5ce744bad7e359022f586085 100644 (file)
@@ -158,13 +158,24 @@ class _HistoryWidget(_ScrollableWidget):
         wrapped = (self._wrapped[:bookmark_idx_pos]
                    + [(0, '-' * self._sizes.x)]  # bookmark line
                    + self._wrapped[bookmark_idx_pos:])
-        to_write = [t[1] for t in wrapped[start_idx_neg:end_idx_neg]]
+
+        to_write_w_attrs: list[tuple[Optional[str], str]] = []
+        do_highlight = False
+        prev_idx_unwrapped: Optional[int] = -1
+        for idx_unwrapped, line in wrapped[start_idx_neg:end_idx_neg]:
+            if idx_unwrapped != prev_idx_unwrapped:
+                do_highlight = line[:1] == '*'
+                prev_idx_unwrapped = idx_unwrapped
+            to_write_w_attrs += [('bold' if do_highlight else None, line)]
+
         if add_scroll_info:
             scroll_info = f'vvv [{(-1) * self._wrapped_idx_neg}] '
             scroll_info += 'v' * (self._sizes.x - len(scroll_info))
-            to_write += [scroll_info]
-        for i, line in enumerate(to_write):
-            self._write(line, i)
+            to_write_w_attrs += [('reverse', scroll_info)]
+
+        for idx, line_t in enumerate(to_write_w_attrs):
+            self._write(start_y=idx, attribute=line_t[0], msg=line_t[1])
+
         hist_idx_pos = self._wrapped[(end_idx_neg or 0) - 1][0]
         self._last_read_idx_pos = max(self._last_read_idx_pos,
                                       hist_idx_pos or 0)