From f5aaf50476e5bf72eaec0c09ddd984b28960ca8d Mon Sep 17 00:00:00 2001 From: blasty Date: Thu, 23 Jul 2026 20:35:13 +0200 Subject: listing: code labels on their own line; search loaded portion (no wedge) Code labels (loc_XXX/jump targets) get their OWN line at depth 0, like IDA, instead of inline with the instruction: the heads walker (annotate) emits a kind=label row ('loc_XXX:') before a named non-function-start code head and strips the name from the instruction. ListingModel doesn't index label rows (goto/xref/follow still land on the code); ListingView renders them at depth 0. Also fix a search regression the extra rows exposed: search no longer forces a blocking full-segment load_all (which stalled/thrashed the worker and wedged the session on the larger annotated listing). It searches the loaded portion; the background grower streams the rest and unloaded lines are skipped until they arrive. Verified: labels on their own line; search 2.9s (was 51.9s+wedge); search/mouse/ rename_history/continuous_view/func_banners/follow_xrefs 26/0. --- idatui/domain.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) (limited to 'idatui/domain.py') diff --git a/idatui/domain.py b/idatui/domain.py index 7452ffd..e8e2996 100644 --- a/idatui/domain.py +++ b/idatui/domain.py @@ -609,9 +609,10 @@ class ListingModel: with self._lock: base = len(self._heads) for i, h in enumerate(page): - # Banner rows (function headers/separators) are display-only; - # don't index them so navigation lands on real code/data. - if h.kind not in ("sep", "funchdr"): + # Banner/label rows (function headers, separators, code labels) + # are display-only; don't index them so navigation lands on the + # real code/data head at that address. + if h.kind not in ("sep", "funchdr", "label"): self._by_ea.setdefault(h.ea, base + i) self._heads.append(h) nxt = cur.get("next") -- cgit v1.3.1-sl0p