diff options
| author | sl0p <sl0p@sl0p.foo> | 2026-08-13 23:14:29 +0200 |
|---|---|---|
| committer | sl0p <sl0p@sl0p.foo> | 2026-08-13 23:14:29 +0200 |
| commit | a194e3f84299c943447c43f5d48d953a095cd4ca (patch) | |
| tree | 47b16e2d5d16fbb1a9a9052f98c2ae05f54b4902 /Makefile | |
| parent | sl0ptty: M4 — OSC 5577 pane status bars, buttons and click reports (diff) | |
| download | slosh-a194e3f84299c943447c43f5d48d953a095cd4ca.tar.gz slosh-a194e3f84299c943447c43f5d48d953a095cd4ca.tar.xz slosh-a194e3f84299c943447c43f5d48d953a095cd4ca.zip | |
sl0ptty: M5 — responsive collapse, status bar, pane finder
D6 as promised: layout(tree, rect) recomputed every frame, and a split that
cannot give every child a floor (24 cols / 6 rows) collapses *itself* into a
stack — one expanded child, every sibling a one-row header. No swap layouts,
no remembered position, no synthesized anything.
Three properties fall out of the design rather than being coded:
- the expanded child is the one holding focus, so focusing a collapsed pane
expands it: from the finder, by clicking its header, or by walking into it;
- a hidden pane is never resized, so its program does not reflow off-screen;
- a narrow/wide cycle returns the exact rects it started with, and a pane
added afterwards is not stacked.
That last one is the fork's 'panes stacked after a responsive collapse/expand
cycle' bug, asserted directly. It cannot regress here without the layout
function growing memory it does not have.
A collapsed header shows the pane's title and its OSC 5577 status, so a
stacked agent is still legible — the monitored strip, without a 'rail' mode.
Below the size where headers fit, a node shows only the focused subtree: at
12x4 you get one pane instead of rects that do not fit on the screen. Every
size from 200x60 down to 12x4 is asserted for overlap and containment.
Status bar: tabs, a +tab button, live pane count, and the held prefix shown as
a mode. The button is '+tab', not '+', because the frame already has a '+' for
splitting — two verbs sharing a glyph is a UI bug the fork shipped, noticed,
and wrote down; the collision showed up here as two hit-list tests failing.
Pane finder (C-a f): substring filter over title, purpose and tab name across
every tab, keyboard and mouse, painted last so its rows win the hit list. It
is how you reach a pane the screen has collapsed away, which is tested.
Deferred to M6: drag-to-reorder, which wants the same drag-state machine as
pane resizing and should be built with it.
213 checks green (186 headless + 27 live).
Diffstat (limited to 'Makefile')
| -rw-r--r-- | Makefile | 3 |
1 files changed, 2 insertions, 1 deletions
@@ -49,7 +49,8 @@ $(TEST_BIN): tests/input_test.c src/input.c $(VT_LIB) | build test: $(BIN) $(TEST_BIN) ## unit + headless checks (fast) ./$(TEST_BIN) @echo - cd tests && python3 test_screen.py && python3 test_layout.py && python3 test_tabs.py && python3 test_osc5577.py + cd tests && python3 test_screen.py && python3 test_layout.py && python3 test_tabs.py && python3 test_osc5577.py && \ + python3 test_responsive.py && python3 test_finder.py test-live: $(BIN) ## the checks that need a real tty (slow) python3 tests/live_m0.py |
