Wide-glyph damage expansion, screenshot dir in settings, install command on releases

- SafeBackend now tracks wide cells and explicitly overwrites the
  right half when a wide glyph is replaced by a narrow one — the case
  ratatui's diff cannot see (both buffers hold a space there) and the
  likely remaining source of ghost glyphs
- Settings dialog: new 'Skärmbilder' row edits screenshot_dir (saved
  to config.toml, applied immediately)
- Release workflow writes an install one-liner (arch-detecting curl)
  into the release body and updates it on every build
- Integration suite: 50/50

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
2026-07-16 00:52:26 +02:00
parent 9d637a9378
commit 87ff0e1b77
5 changed files with 129 additions and 33 deletions

View File

@@ -396,10 +396,10 @@ def main():
text = disp.frame_text(timeout=5.0, contains="Tema:")
check("inställningsdialogen öppnas från panelen", "Tema:" in text
and "Skugga" in text and "config.toml" in text)
# Ned tre rader till Skugga (0=Tema, 1=Panel, 2=Editor, 3=Skugga)
disp.send(key_event(code="Down"))
disp.send(key_event(code="Down"))
disp.send(key_event(code="Down"))
# Ned fyra rader till Skugga
# (0=Tema, 1=Panel, 2=Editor, 3=Skärmbilder, 4=Skugga)
for _ in range(4):
disp.send(key_event(code="Down"))
disp.send(key_event(code="Enter"))
time.sleep(0.5)
cfg_now = open(os.path.join(cfgdir, "config.toml")).read()
@@ -446,7 +446,7 @@ def main():
text = disp.frame_text(timeout=5.0, contains="Filformat")
check("inställningarna visar filformat-raden", "1 associationer" in text,
f"frame: {text[:300]!r}")
for _ in range(5):
for _ in range(6):
disp.send(key_event(code="Down"))
disp.send(key_event(code="Enter"))
text = disp.frame_text(timeout=5.0, contains=".txt")
@@ -480,11 +480,35 @@ def main():
check("PNG-skärmbilden har giltig header",
magic == b"\x89PNG\r\n\x1a\n", f"magic: {magic!r}")
# ── 4k2. Skärmbildskatalog via inställningarna ───────────────────
disp.send(mouse_event({"Down": "Left"}, gx, 0))
disp.send(mouse_event({"Up": "Left"}, gx, 0))
disp.frame_text(timeout=5.0, contains="Skärmbilder")
for _ in range(3):
disp.send(key_event(code="Down"))
disp.send(key_event(code="Enter"))
for ch in "bilder":
disp.send(key_event(ch=ch))
disp.send(key_event(code="Enter"))
time.sleep(0.5)
cfg_now = open(os.path.join(cfgdir, "config.toml")).read()
check("skärmbildskatalogen sparas till config",
'screenshot_dir = "bilder"' in cfg_now)
disp.send(key_event(code="Esc"))
time.sleep(0.3)
disp.send(key_event(ch="p", modifiers="ALT"))
disp.frame_text(timeout=8.0, contains="Skärmbild sparad")
disp.send(key_event(code="Enter"))
time.sleep(0.3)
check("skärmbilden hamnar i den valda katalogen",
os.path.isdir(os.path.join(cfgdir, "bilder"))
and len(os.listdir(os.path.join(cfgdir, "bilder"))) >= 1)
# ── 4l. Tangent-fliken i inställningarna ─────────────────────────
disp.send(mouse_event({"Down": "Left"}, gx, 0))
disp.send(mouse_event({"Up": "Left"}, gx, 0))
disp.frame_text(timeout=5.0, contains="Tangenter")
for _ in range(6):
for _ in range(7):
disp.send(key_event(code="Down"))
disp.send(key_event(code="Enter"))
text = disp.frame_text(timeout=5.0, contains="Fönsterväxlare")