From 3b1718fa4daba01661dc6a1ac8ea2fe5eabd43a7 Mon Sep 17 00:00:00 2001 From: Jean-Pierre Martineau Date: Sun, 26 Jul 2026 20:31:05 -0400 Subject: [PATCH] Paths: arrow the TX sweep title, drop dead path_str, hscroll the trophy browser MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The sweep table title used ASCII ->, TraceResult.path_str was an unused ASCII-arrow renderer, and the trophy browser truncated long walks at the fold — SelectScreen's own hscroll now slides the highlighted row. Co-Authored-By: Claude Fable 5 --- meshterm/core/models.py | 8 -------- meshterm/ui/records_screen.py | 1 + meshterm/ui/widgets.py | 2 +- 3 files changed, 2 insertions(+), 9 deletions(-) diff --git a/meshterm/core/models.py b/meshterm/core/models.py index ec19dff..ddc1bf8 100644 --- a/meshterm/core/models.py +++ b/meshterm/core/models.py @@ -539,14 +539,6 @@ class TraceResult: return None return min(h.snr for h in self.hops) - @property - def path_str(self) -> str: - """A compact ``a -> b -> c`` rendering of the resolved path.""" - if not self.hops: - return self.target - nodes = [h.node or f"hop{h.index}" for h in self.hops] - return " -> ".join(nodes) - def edges(self, device_label: str = LOCAL_DEVICE_LABEL) -> list["HopEdge"]: """Frame the per-hop SNR as directed ``origin -> destination`` edges. diff --git a/meshterm/ui/records_screen.py b/meshterm/ui/records_screen.py index dccce77..b3be13e 100644 --- a/meshterm/ui/records_screen.py +++ b/meshterm/ui/records_screen.py @@ -680,6 +680,7 @@ async def open_records(ctx: "AppContext") -> dict: items, footer_hint="↑↓ move · Enter open · Esc back", wrap=False, + hscroll=True, # a long walk's row slides under ←→ instead of dying at the fold ) picked = await session.run_screen(browser) if picked is CANCEL or picked is None or picked[0] == "back": diff --git a/meshterm/ui/widgets.py b/meshterm/ui/widgets.py index 839f4c5..8284893 100644 --- a/meshterm/ui/widgets.py +++ b/meshterm/ui/widgets.py @@ -1091,7 +1091,7 @@ def tx_opt_table(result: TxOptResult) -> Table: A Rich :class:`Table` of TX level, target SNR, success rate, and sample count. """ table = Table( - title=f"TX sweep · {result.admin_node} -> {result.target}", + title=f"TX sweep · {result.admin_node} → {result.target}", border_style="muted", expand=False, )