Switch the theme live

Widgets copy their colors when they are created, so they now get role
tokens (one unique RGB value per role) instead of colors, and a wrapper
around the tcell screen replaces the tokens with the current theme's
colors in SetContent. Changing the theme in the Config view swaps that
table; the next draw recolors everything. Poster colors that equal a
token are nudged off it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019reK4DUGYqDUjniWYJvwUW
This commit is contained in:
2026-10-21 12:11:19 +02:00
co-authored by Claude Opus 5.5
parent 24f7c38a5b
commit 67f5cf6ce7
11 changed files with 171 additions and 38 deletions
+3 -1
View File
@@ -3,11 +3,13 @@
## Unreleased
- **Dark and light themes:** fixed colors that look the same in every terminal (`ui.theme`: `auto`,
`dark` or `light`, also in the Config view; applies at the next start). Before, the panes used
`dark` or `light`, also in the Config view, where a change recolors everything at once). Before, the panes used
color 0 of the terminal's palette, which color themes often set to a grey that is not their
background (e.g. Catppuccin), so the program looked washed out, and on light themes it was a dark
grey slab with white text. `auto` asks the terminal for its background color and picks light or
dark to match; the Log says which and why.
- **Space presses buttons** (Save, Revert, the buttons of dialogs), as the help says; before only
Enter did, except for Test.
- **Smooth scrolling on huge terminals:** while an arrow key is held, the poster waits until the
selection rests (120 ms). Every poster rewrites all of its cells, which on a terminal zoomed far
out was more output per step than the terminal could draw, so moving through a list lagged.