aboutsummaryrefslogtreecommitdiffstats
path: root/Makefile
diff options
context:
space:
mode:
authorsl0p <sl0p@sl0p.foo>2026-08-13 23:14:29 +0200
committersl0p <sl0p@sl0p.foo>2026-08-13 23:14:29 +0200
commita194e3f84299c943447c43f5d48d953a095cd4ca (patch)
tree47b16e2d5d16fbb1a9a9052f98c2ae05f54b4902 /Makefile
parentsl0ptty: M4 — OSC 5577 pane status bars, buttons and click reports (diff)
downloadslosh-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--Makefile3
1 files changed, 2 insertions, 1 deletions
diff --git a/Makefile b/Makefile
index 3d9761b..e58a0a6 100644
--- a/Makefile
+++ b/Makefile
@@ -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