From 1f04ec9967c4fb4703657458531cbbe958e66b37 Mon Sep 17 00:00:00 2001 From: blasty Date: Sat, 25 Jul 2026 12:23:18 +0200 Subject: decomp: Home/End move along the line instead of scrolling to top/bottom MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The pseudocode view still had the old mapping (home -> goto_top, end -> goto_bottom), so jumped you to the bottom of the function instead of the end of the line. Bring it in line with the listing view: home start of line ctrl+home top of the function shift+home first non-blank ctrl+end/G bottom of the function end end of line shift+home skips the C indentation — the pseudocode analogue of the listing's skip-the-address-gutter. Verified live and locked in view_toggle (5 checks): stays on the line with the scroll unchanged, hits column 0, lands on the indent width, and ctrl+home/ctrl+end still reach top/bottom. Full suite 179/2-flake. --- tests/test_scenarios.py | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) (limited to 'tests') diff --git a/tests/test_scenarios.py b/tests/test_scenarios.py index b6ed230..1a55f23 100644 --- a/tests/test_scenarios.py +++ b/tests/test_scenarios.py @@ -853,6 +853,40 @@ async def s_view_toggle(c: Ctx): c.check("pseudocode has a numbered gutter (line 1 first)", dec._gutter > 0 and row0[:dec._gutter].strip() == "1", f"gutter={dec._gutter} row0={row0[:10]!r}") + # Home/End move along the line here too (they used to scroll to top/bottom). + line = next((i for i, t in enumerate(dec._texts) + if t.startswith(" ") and t.strip()), None) + if line is not None: + text = dec._texts[line] + dec.focus() + dec.cursor, dec.cursor_x = line, 0 + dec.refresh() + await c.pause(0.05) + top = round(dec.scroll_offset.y) + await c.press("end") + await c.pause(0.05) + c.check(" in pseudocode goes to end-of-line, not the bottom", + dec.cursor == line and dec.cursor_x == max(len(text) - 1, 0) + and round(dec.scroll_offset.y) == top, + f"line={dec.cursor} col={dec.cursor_x} len={len(text)}") + await c.press("home") + await c.pause(0.05) + c.check(" in pseudocode goes to start-of-line", + dec.cursor == line and dec.cursor_x == 0, + f"line={dec.cursor} col={dec.cursor_x}") + await c.press("shift+home") + await c.pause(0.05) + c.check(" skips the indentation", + dec.cursor_x == len(text) - len(text.lstrip()), + f"col={dec.cursor_x} indent={len(text) - len(text.lstrip())}") + await c.press("ctrl+end") + await c.pause(0.1) + c.check(" still goes to the bottom", + dec.cursor >= dec.total - 1, f"{dec.cursor}/{dec.total}") + await c.press("ctrl+home") + await c.pause(0.1) + c.check(" still goes to the top", dec.cursor == 0, + f"{dec.cursor}") @scenario("search") -- cgit v1.3.1-sl0p