aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorblasty <blasty@local>2026-07-25 20:51:25 +0200
committerblasty <blasty@local>2026-07-25 20:51:25 +0200
commite7a919f113e7001b83076a1ed7f58bb75caa75a8 (patch)
treebcdd3c2ac7b348d0f7b20df3c8bec0e592f34aa5
parentsplit: keep _active in step with focus, so Enter follows the pane you're in (diff)
downloadida-tui-e7a919f113e7001b83076a1ed7f58bb75caa75a8.tar.gz
ida-tui-e7a919f113e7001b83076a1ed7f58bb75caa75a8.tar.xz
ida-tui-e7a919f113e7001b83076a1ed7f58bb75caa75a8.zip
split: don't overwrite "decompiling…" with the idle status
Travelling the history stack in split mode showed no feedback at all, so Esc still read as a no-op whenever the target needed decompiling — the exact thing cc44f5c was supposed to fix. That commit set the message in action_back, but the split branch of _show_active ends with _status_for_cur("split"), which unconditionally wrote the idle status straight over it. The spinner overlay was already being raised correctly; only the words were lost. The split branch now keeps the in-flight message while it has just kicked off a decompile, and on_descendant_focus (added in 190e28b, and firing exactly when focus lands on the restored pane) no longer restatuses while dec.loading. Caveat on verification: I could not observe this on targets/echo. Going back always lands on a function the decompiler has already cached, so the busy branch completes without a visible frame — sampling the status bar every 60ms across the whole Esc showed no intermediate state. What's verified here is that the busy branch sets the message and that nothing downstream clobbers it; the visible effect needs a target slow enough to decompile, i.e. a real binary. Suite 192/0.
-rw-r--r--idatui/app.py14
1 files changed, 11 insertions, 3 deletions
diff --git a/idatui/app.py b/idatui/app.py
index 5889a27..4bba7df 100644
--- a/idatui/app.py
+++ b/idatui/app.py
@@ -3898,7 +3898,8 @@ class IdaTui(App):
return
self._active = mode
self._sync_split(mode) # re-link the band from the new driver
- self._status_for_cur("split")
+ if not self.query_one(DecompView).loading:
+ self._status_for_cur("split") # never clobber "decompiling…"
def action_toggle_view(self) -> None:
"""Tab: switch the code pane between disassembly and pseudocode (or leave
@@ -5353,14 +5354,21 @@ class IdaTui(App):
hx.display = False
lst.display = dec.display = True
self.query_one("#panes").set_class(True, "split")
- if self._cur is not None and dec.loaded_ea != self._cur.ea:
+ busy = self._cur is not None and dec.loaded_ea != self._cur.ea
+ if busy:
dec.loading = True
self._load_decomp(self._cur.ea, self._cur.name)
else:
dec.loading = False
if grab:
(dec if self._active == "decomp" else lst).focus()
- self._status_for_cur("split")
+ if busy and self._cur is not None:
+ # Keep the in-flight message: the idle status used to overwrite
+ # it, so travelling history in split showed nothing at all while
+ # a decompile ran and Esc looked like a no-op.
+ self._status(f"{self._cur.name} \u2014 decompiling\u2026")
+ else:
+ self._status_for_cur("split")
return
self._split = False # a single-view target (hex, etc.) leaves split
self.query_one("#panes").set_class(False, "split")