diff options
| author | blasty <blasty@local> | 2026-08-09 23:16:54 +0200 |
|---|---|---|
| committer | blasty <blasty@local> | 2026-08-09 23:16:54 +0200 |
| commit | 0717de70acb7ff9d2b57044853b68a921a73b2a6 (patch) | |
| tree | da498d8a594c932611f32c4c24c77d6a79e43e05 /idatui/remote_tools.py | |
| parent | README: drop the Docs section (diff) | |
| download | ida-tui-0717de70acb7ff9d2b57044853b68a921a73b2a6.tar.gz ida-tui-0717de70acb7ff9d2b57044853b68a921a73b2a6.tar.xz ida-tui-0717de70acb7ff9d2b57044853b68a921a73b2a6.zip | |
PgUp/PgDn page the list overlays, not just the code views
The help screen has always advertised 'PgDn / PgUp - page down / up', but
only the four code views implemented it. In the palettes the keys did
nothing at all: those screens focus a filter Input, so the OptionList's own
pageup/pagedown bindings never fire -- every key goes to the Input, and an
unhandled one is silently dropped.
Adds OptionListNav, a mixin carrying the forwarding actions, and puts the
six Input+OptionList overlays on it: symbols, search, strings, registers,
load options, projects. They already held six BYTE-IDENTICAL copies of
action_cursor_down/up, so this removes more than it adds.
Paging delegates to the widget's own action_page_up/down instead of moving
by a guessed N: those know the live viewport height, skip disabled options
and clamp at both ends -- and it keeps the forwarded panes behaving exactly
like the ones that page natively.
Two panes deliberately stay off the mixin:
* XrefsScreen focuses its list, so Textual already pages it. Now covered
by a test so nobody 'fixes' it into double-stepping.
* StructEditor binds ctrl+n to 'new type', so it cannot take NAV_BINDINGS;
it gets page actions through its existing filter-focused guard instead.
BINDINGS do not merge from a plain mixin (Textual only merges them from
DOMNode subclasses), so every screen splats *NAV_BINDINGS explicitly -- the
same trap SearchMixin documents.
Tests gate on scrollable_content_region.height >= 1 first: paging is
geometry, and before layout the page size is 0, so every check would pass
against a no-op. Verified by removing the bindings again -- 3 checks fail
with highlighted=0, which is the exact silent failure being fixed.
Full gate: 1040 passed, 0 failed.
Diffstat (limited to 'idatui/remote_tools.py')
0 files changed, 0 insertions, 0 deletions
