mirror of
https://github.com/kovidgoyal/kitty.git
synced 2026-06-28 03:41:41 +00:00
The choose-fonts kitten queries the terminal for the user's foreground and
background colors at startup by sending a DCS request. The terminal responds
with separate DCS response strings — one per field — which arrive
asynchronously through on_query_response.
The background handler unconditionally called draw_screen() after storing its
value. If the terminal's DCS response for "background" arrived before the
response for "foreground", draw_screen() fired with text_style.Foreground
still at its Go zero value ("").
The font list preview (list.go) only guarded against empty Background, not
empty Foreground, so it passed the check and sent a render_family_samples
command to the Python backend with foreground="". The backend's to_color('')
raised ValueError: Invalid color name: '', crashing the kitten.
The faces pane (faces.go) launched a render_family_samples goroutine
unconditionally when its preview cache was empty, with no guard at all.
Fix
---
1. ui.go — Only trigger draw_screen() from the foreground or background
handler when the counterpart field is already populated, so the UI
never renders with a partial TextStyle.
2. list.go — Require both Foreground and Background to be non-empty
before rendering the font preview, not just Background alone.
3. faces.go — Skip the render_family_samples goroutine if either color
field is still empty. The preview cache stays empty, so the next
redraw (triggered when the counterpart query response arrives, or
by on_wakeup) retries with full colors.
|
||
|---|---|---|
| .. | ||
| ask | ||
| broadcast | ||
| choose_files | ||
| choose_fonts | ||
| clipboard | ||
| command_palette | ||
| desktop_ui | ||
| diff | ||
| dnd | ||
| hints | ||
| hyperlinked_grep | ||
| icat | ||
| notify | ||
| pager | ||
| panel | ||
| query_terminal | ||
| quick_access_terminal | ||
| remote_file | ||
| resize_window | ||
| show_key | ||
| ssh | ||
| themes | ||
| transfer | ||
| tui | ||
| unicode_input | ||
| __init__.py | ||
| runner.py | ||