46 lines
2.0 KiB
Markdown
46 lines
2.0 KiB
Markdown
# Kända problem
|
||
|
||
## Spöktecken i vissa terminaler vid fönsterflytt
|
||
|
||
**Status:** öppen — behöver reproduktionsinfo från värdterminalen.
|
||
|
||
**Symptom:** när ett fönster (t.ex. TUI-FM) dras runt kan enstaka ikoner
|
||
och bokstäver "fastna" på skärmen — ofta från vänsterspalten i TUI-FM —
|
||
tills en annan ruta dras över dem.
|
||
|
||
**Analys hittills:**
|
||
|
||
- Kompositorn är verifierat korrekt: headless-frames (daemon-läget) är
|
||
pixelperfekta efter godtyckliga drag — varje rad exakt rätt bredd,
|
||
inga dubbletter (`tests/integration.py` + manuella tmux-tester).
|
||
- I tmux (strikt referensterminal) uppstår inga spöken, varken under
|
||
eller efter drag.
|
||
- Rotorsaksklass: terminalen/fonten och `unicode-width` är oense om
|
||
glyfbredder (typiskt emoji med tvetydig East-Asian-Width, t.ex. ⭐ ➕),
|
||
eller terminalens hantering av delvis överskrivna breda glyfer.
|
||
|
||
**Åtgärdade delar (som inte räckt fullt ut enligt rapport):**
|
||
|
||
1. Full omritning vid drag-släpp/stängning/snap (`needs_full_redraw`).
|
||
2. `SafeBackend`: explicit markörpositionering (`ESC[y;xH`) för varje
|
||
cell som skrivs — breddoenighet kan inte längre ackumuleras inom en
|
||
rad.
|
||
3. Skade-expansion för breda glyfer: när ett brett tecken ersätts av
|
||
ett smalt skrivs högercellen över explicit (ratatui-diffen ser den
|
||
inte eftersom båda buffertarna har space där).
|
||
|
||
**För att komma vidare behövs:**
|
||
|
||
- Terminalemulator + version (Konsole? Kitty? Alacritty? ...) och font.
|
||
- `echo $TERM` i terminalen där felet syns.
|
||
- En PNG-skärmbild via TUI-WM:s inbyggda `alt+p` när spöket syns
|
||
(visar kompositorns bild) **plus** en riktig skärmdump av terminalen
|
||
(visar vad terminalen faktiskt ritar) — skiljer de sig är felet
|
||
bekräftat terminal-sidigt.
|
||
- Test i en annan terminal (t.ex. kitty eller wezterm) för jämförelse.
|
||
|
||
**Möjliga nästa steg:** rendera om hela raden (inte bara cellen) när en
|
||
rad innehåller tecken med tvetydig bredd; alternativt heltäckande
|
||
frame-omskrivning med synkroniserade uppdateringar (DEC 2026) som i
|
||
klient-läget, där problemet inte kan uppstå.
|