summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
Diffstat (limited to 'test')
-rw-r--r--test/appearance_gallery.py4
-rw-r--r--test/column_drag.zig5
-rw-r--r--test/column_tags.py5
-rw-r--r--test/gui-goldens.txt13
-rw-r--r--test/gui_golden.py5
-rw-r--r--test/panes.zig1
-rw-r--r--test/pdf.zig2
-rw-r--r--test/snapshots/argv.snap2
-rw-r--r--test/snapshots/builtins.snap2
-rw-r--r--test/snapshots/chordcut.snap2
-rw-r--r--test/snapshots/cmdword.snap2
-rw-r--r--test/snapshots/delask.snap2
-rw-r--r--test/snapshots/doccol.snap2
-rw-r--r--test/snapshots/emptycol.golden14
-rw-r--r--test/snapshots/emptycol.snap22
-rw-r--r--test/snapshots/filewatch.snap2
-rw-r--r--test/snapshots/find.snap2
-rw-r--r--test/snapshots/fsearch.snap2
-rw-r--r--test/snapshots/grep.snap2
-rw-r--r--test/snapshots/jumps.snap2
-rw-r--r--test/snapshots/layout-close.golden5
-rw-r--r--test/snapshots/layout-close.snap8
-rw-r--r--test/snapshots/layout-open.snap2
-rw-r--r--test/snapshots/leader.snap2
-rw-r--r--test/snapshots/lookpanes.snap2
-rw-r--r--test/snapshots/lookrange.snap2
-rw-r--r--test/snapshots/lsp-client.snap2
-rw-r--r--test/snapshots/lsp.snap2
-rw-r--r--test/snapshots/lspcomplete.snap2
-rw-r--r--test/snapshots/lsprelpath.snap2
-rw-r--r--test/snapshots/mini.snap2
-rw-r--r--test/snapshots/nested.snap2
-rw-r--r--test/snapshots/psearch.snap2
-rw-r--r--test/snapshots/reflow.snap2
-rw-r--r--test/snapshots/rsearch.snap2
-rw-r--r--test/snapshots/savepane.snap2
-rw-r--r--test/snapshots/scrolloff.snap2
-rw-r--r--test/snapshots/splitparent.snap2
-rw-r--r--test/snapshots/stepgrain.snap2
-rw-r--r--test/snapshots/tagalign.snap2
-rw-r--r--test/snapshots/tagalign2col.snap2
-rw-r--r--test/snapshots/tagbottom.snap2
-rw-r--r--test/snapshots/tagnav.snap2
-rw-r--r--test/snapshots/themesel.snap2
-rw-r--r--test/snapshots/tinywin.snap2
-rw-r--r--test/snapshots/topbarexec.snap2
-rw-r--r--test/snapshots/ttyhelp.snap2
-rw-r--r--test/snapshots/ttylook.snap2
-rw-r--r--test/snapshots/ttyonly.snap2
-rw-r--r--test/snapshots/ttytaken.snap2
-rw-r--r--test/snapshots/windownav.snap2
51 files changed, 138 insertions, 26 deletions
diff --git a/test/appearance_gallery.py b/test/appearance_gallery.py
index 48c0ea1b..bc9a7570 100644
--- a/test/appearance_gallery.py
+++ b/test/appearance_gallery.py
@@ -78,8 +78,8 @@ def run(args):
launch=launch, inherited=inherited, terminal=handles) as (client, _):
source = next(serial for serial, tag in panes(client).items() if str(source_path) in tag)
before = set(panes(client))
- command(client, source, 'Newcol')
- right = require(wait_for(lambda: next((s for s in panes(client) if s not in before), None)), 'right column missing')
+ command(client, source, 'Newcol') # empty, its tag with the keyboard
+ right = int(client.read('/pane/new'))
client.write(f'/pane/{right}/name', f'{root / "Review"}\n'.encode())
client.write(f'/pane/{right}/body', PREFERENCE_NOTES if args.theme_selector else NOTES, truncate=True)
client.write(f'/pane/{right}/dirty', b'0\n')
diff --git a/test/column_drag.zig b/test/column_drag.zig
index 3aea4286..89508800 100644
--- a/test/column_drag.zig
+++ b/test/column_drag.zig
@@ -46,7 +46,6 @@ test "column grip drag moves only its interval and keeps tag caret with the colu
defer p.deinit();
_ = try p.setTestFile("body\n");
p.presentation.enabled = false;
- p.settings.column_tags = true;
p.row_metrics = .{ .body_w = 10, .body_h = 20, .tagline_w = 5, .tagline_h = 10 };
for (0..3) |_| {
try std.testing.expect(p.executeBuiltinLine(p.active, "New"));
@@ -127,7 +126,6 @@ test "column grip is separate from compact text and the resize seam" {
defer p.deinit();
_ = try p.setTestFile("body\n");
p.presentation.enabled = false;
- p.settings.column_tags = true;
p.row_metrics = .{ .body_w = 10, .body_h = 20, .tagline_w = 5, .tagline_h = 10 };
try std.testing.expect(p.executeBuiltinLine(0, "New"));
try std.testing.expect(layout.splitColumn(p, p.active, p.active, false));
@@ -181,7 +179,6 @@ test "column grips stay blank, and muted across focus and hover until grabbed" {
defer p.deinit();
_ = try p.setTestFile("left\n");
p.presentation.enabled = false;
- p.settings.column_tags = true;
p.row_metrics = .{ .body_w = 10, .body_h = 20, .tagline_w = 5, .tagline_h = 10 };
try std.testing.expect(p.executeBuiltinLine(0, "New"));
try std.testing.expect(layout.splitColumn(p, p.active, p.active, false));
@@ -219,7 +216,6 @@ test "column grip dropped in its own place moves the column's left edge" {
defer p.deinit();
_ = try p.setTestFile("body\n");
p.presentation.enabled = false;
- p.settings.column_tags = true;
try std.testing.expect(p.executeBuiltinLine(0, "New"));
try std.testing.expect(layout.splitColumn(p, p.active, p.active, false));
p.update(.tick);
@@ -284,7 +280,6 @@ test "column grip drag previews where the column lands, in the seam beside its r
defer p.deinit();
_ = try p.setTestFile("body\n");
p.presentation.enabled = false;
- p.settings.column_tags = true;
for (0..2) |_| {
try std.testing.expect(p.executeBuiltinLine(p.active, "New"));
try std.testing.expect(layout.splitColumn(p, p.active, p.active, false));
diff --git a/test/column_tags.py b/test/column_tags.py
index fe3a8699..ba638b7d 100644
--- a/test/column_tags.py
+++ b/test/column_tags.py
@@ -138,7 +138,10 @@ def run(args):
before = panes(client)
keys.click(*require(locate(client, 'Newcol', row=0), 'Newcol missing'), button=1)
- right = require(wait_for(lambda: new_serial(client, before)), 'Newcol did not create its pane')
+ # Newcol makes an empty column and gives its tag the keyboard; the
+ # pane made next fills it.
+ require(wait_for(lambda: client.read('/focus').strip() == b''), 'Newcol did not focus its empty column')
+ right = int(client.read('/pane/new'))
right_name = root / 'right.rs'
client.write(f'/pane/{right}/name', f'{right_name}\n'.encode())
right_body = b'// Column-local scratch\nfn main() {\n let ready = true;\n}\n'
diff --git a/test/gui-goldens.txt b/test/gui-goldens.txt
index 38ca89e5..8e859fdc 100644
--- a/test/gui-goldens.txt
+++ b/test/gui-goldens.txt
@@ -8,11 +8,10 @@
08-wide-glyph-edges 123a182b82a2a8c455291a5c89ccfa28e1f8ce9566172ca404c0b9c71dd33b48
09-collapsed-focus-tint ae66076fdfb0cab9a906b052df257deee5ba91a6274712d52a76d8a7adc5b415
10-tagbottom dd8ba0d3ecabf3420d000b0c9591a57278179cbd2a9060f849d283f3881d1847
-11-column-tags 6b1731d1611404597c96ad77f34c2d5cd5a81c1085ec68c6779388e07ce28614
-12-multiline-tag 1b9ccd331814dc76111470f18448b1ca192e1edc3d79ea6eee19a6a78a4b1831
-13-image a52e2cf9f238447d885692cba01e68ef7fdc6ae3fc7c8fe1e95c8463c85f519c
-14-theme-ink cc2ea256ddda24e1c97871f75b71ddf62fa825bd02f5d1432592d05e478c707a
-15-theme-acme-light 2bde8a2bdfada7f061217f52cb2272913fc0657dbfa1d7448e1852f321f8e3bf
+12-multiline-tag 0edffadbabef48e5a7422ef8433ccf2552b9c812a352e30b32bb000aacad607d
+13-image 91f9363493c9c1b9618426ef7362da469f5b051890a3128ef8c94cee6ae2bb06
+14-theme-ink 84440553176db695a9a8a82714e858c815ea31cd82a29760c4894b4675c3a2ed
+15-theme-acme-light cd216282f477512284372f330709d0cde93d1f2fb6d9c4616ebb642f3ef5c129
16-debug 129ad6f5f85b0e60e81bc6e8e78434629ee751f49731cf2eb28fd0553efd914a
-17-terminal 45a3d9f823ccf28a336ef6687c9c210f9fb05cc426c0fdee98bb0ebb2a957d42
-18-mid-transition 79f90fb247f75ab284fca147028ee18ea78e77a02a57203699fb423f4bcc02fb
+17-terminal d958ca0182ddf360abd266e29c3934c6e251ed25f258f687597372369899eaea
+18-mid-transition a35f460c8637c2183f37b3a5ac2e7bd34bdde708a52fa0f8dcdbf937627b125f
diff --git a/test/gui_golden.py b/test/gui_golden.py
index d97009c9..407b19cd 100644
--- a/test/gui_golden.py
+++ b/test/gui_golden.py
@@ -91,7 +91,7 @@ def run(args):
config.mkdir(parents=True)
# No linger: a dismissed message is gone, not caught part way, when a
# scene settles.
- (config / 'init').write_text('Shell /bin/sh\nTheme forge\nMessageLinger 0\n')
+ (config / 'init').write_text('Shell /bin/sh\nTheme forge\nMessageLinger 0\nPlacement pardes\n')
source = root / 'shapes.zig'
source.write_bytes(ZIG)
notes = root / 'notes.txt'
@@ -177,9 +177,6 @@ def run(args):
client.write('/ctl', b'Tagbottom\n')
scene('10-tagbottom')
client.write('/ctl', b'Tagbottom\n')
- client.write('/ctl', b'ColumnTags\n')
- scene('11-column-tags')
- client.write('/ctl', b'ColumnTags\n')
client.write(f'/pane/{first}/tag', b' Second\nthird line of the tag')
scene('12-multiline-tag')
client.write(f'/pane/{first}/look', f'{image}\n'.encode())
diff --git a/test/panes.zig b/test/panes.zig
index 40b4b6ba..9802432e 100644
--- a/test/panes.zig
+++ b/test/panes.zig
@@ -103,7 +103,6 @@ const TagLayerTests = struct {
defer p.deinit();
_ = try p.setTestFile("body\n");
p.presentation.enabled = false;
- p.settings.column_tags = true;
p.row_metrics = .{ .body_w = 10, .body_h = 20, .tagline_w = 5, .tagline_h = 10 };
try std.testing.expect(p.executeBuiltinLine(0, "New"));
const second = p.active;
diff --git a/test/pdf.zig b/test/pdf.zig
index 2699fe01..4cb8f3dd 100644
--- a/test/pdf.zig
+++ b/test/pdf.zig
@@ -343,7 +343,7 @@ test "PdfSections Look follows the exact owning PDF, not an equal path" {
const duplicate_id = p.freeSlot() orelse return error.NoDuplicatePdfSlot;
const duplicate = try panes.Pdf.openPane(p, duplicate_id, path, 0);
- pardes.exec.placeDoc(p, 0, duplicate_id, duplicate);
+ pardes.exec.placeNew(p, 0, 0, duplicate_id, .doc);
layout.compute(p);
panes.Pdf.openSections(p, duplicate_id);
const duplicate_output_id = duplicate.search_pane orelse return error.MissingDuplicatePdfSections;
diff --git a/test/snapshots/argv.snap b/test/snapshots/argv.snap
index 892f6b24..0d4c8f64 100644
--- a/test/snapshots/argv.snap
+++ b/test/snapshots/argv.snap
@@ -4,6 +4,8 @@
# argument becomes the cwd the shell spawns in
lines notes.txt 8
file zmarker.txt x
+# its clicks and goldens were laid out by the pardes placement rule
+config Placement pardes
start 31 100
wait 8000 $
stable 700 20000
diff --git a/test/snapshots/builtins.snap b/test/snapshots/builtins.snap
index 8bf70f36..7810ebda 100644
--- a/test/snapshots/builtins.snap
+++ b/test/snapshots/builtins.snap
@@ -1,4 +1,6 @@
lines notes.txt 6
+# its clicks and goldens were laid out by the pardes placement rule
+config Placement pardes
start 67 120 notes.txt
wait 8000 notes.txt
stable 700 20000
diff --git a/test/snapshots/chordcut.snap b/test/snapshots/chordcut.snap
index 56170cce..01fee1f7 100644
--- a/test/snapshots/chordcut.snap
+++ b/test/snapshots/chordcut.snap
@@ -11,6 +11,8 @@ lines g.txt 2
# unrelated right column untouched. Give the caller enough cells that the selected
# `echo B''OO g.txt` remains one displayed row; this test is about chords, not
# soft-wrap traversal.
+# its clicks and goldens were laid out by the pardes placement rule
+config Placement pardes
start 31 120 -n 3
wait 8000 f.txt
stable 700 20000
diff --git a/test/snapshots/cmdword.snap b/test/snapshots/cmdword.snap
index 631fab8b..438d3ed5 100644
--- a/test/snapshots/cmdword.snap
+++ b/test/snapshots/cmdword.snap
@@ -23,6 +23,8 @@ file zzmark.txt x
# the top of the body -- which would move every row this script clicks. The
# verbs are what is under test here, not the announcement.
config Verbose off
+# its clicks and goldens were laid out by the pardes placement rule
+config Placement pardes
start 31 120 cmds.txt
wait 8000 Newcol Joincol
wait 8000 cmds.txt
diff --git a/test/snapshots/delask.snap b/test/snapshots/delask.snap
index 04bc850c..05f4b204 100644
--- a/test/snapshots/delask.snap
+++ b/test/snapshots/delask.snap
@@ -2,6 +2,8 @@
# pane's notice band, which one takes its rows: k above, j below, anything else
# keeps the pane. A click, and DelAbove/DelBelow (Del k / Del j), never ask.
file top.txt top-marker
+# its clicks and goldens were laid out by the pardes placement rule
+config Placement pardes
start 36 100 top.txt
wait 8000 top-marker
stable 700 20000
diff --git a/test/snapshots/doccol.snap b/test/snapshots/doccol.snap
index 2135c533..7855453c 100644
--- a/test/snapshots/doccol.snap
+++ b/test/snapshots/doccol.snap
@@ -17,6 +17,8 @@ file c.txt CCC
# the top of the body -- which moves every row this script clicks. What the
# verbs do is what is under test, not the announcement.
config Verbose off
+# its clicks and goldens were laid out by the pardes placement rule
+config Placement pardes
start 31 100 a.txt
wait 8000 AAA
stable 700 20000
diff --git a/test/snapshots/emptycol.golden b/test/snapshots/emptycol.golden
new file mode 100644
index 00000000..bb41c028
--- /dev/null
+++ b/test/snapshots/emptycol.golden
@@ -0,0 +1,14 @@
+== snap newcol grid=100x24 cursor=53,1
+|Newcol Joincol Find Grep Help Changelog Tutor Dump NextColor Debug Exit
+| New Tty Find Grep Joincol Delcol New Tty Find Grep Joincol Delcol
+| /tmp/pardes-snap/emptycol/cwd/notes.txt Save Tt
+| 1 one
+| 2 two
+== snap filled grid=100x24 cursor=54,5
+|2: /tmp/pardes-snap/emptycol/cwd/notes.txt Save Tt /tmp/pardes-snap/emptycol/cwd Tty+bash Save Mod
+|3: 1 one ls
+|4: 2 two notes.txt
+== snap emptied grid=100x24 cursor=53,1
+|2: /tmp/pardes-snap/emptycol/cwd/notes.txt Save Tt
+|3: 1 one
+|4: 2 two
diff --git a/test/snapshots/emptycol.snap b/test/snapshots/emptycol.snap
new file mode 100644
index 00000000..edf61eed
--- /dev/null
+++ b/test/snapshots/emptycol.snap
@@ -0,0 +1,22 @@
+# A column can hold no pane, as acme's can (cols.c:186). Newcol makes one
+# empty, its tag over blank space and holding the keyboard; the next pane
+# made while it is the active column fills it whole (makenewwindow,
+# util.c:468-469); and a shell that exits there leaves it empty again, the
+# keyboard back on its tag.
+file notes.txt one\ntwo
+config Verbose off
+start 24 100 notes.txt
+wait 8000 notes.txt
+stable 700 20000
+key space c n
+stable 400 5000
+snap newcol
+key a-n
+stable 700 15000
+snap filled
+key c-b
+stable 400 5000
+text exit
+key enter
+stable 700 10000
+snap emptied
diff --git a/test/snapshots/filewatch.snap b/test/snapshots/filewatch.snap
index 38b6ac8e..1579ad40 100644
--- a/test/snapshots/filewatch.snap
+++ b/test/snapshots/filewatch.snap
@@ -22,6 +22,8 @@ lines sub/s.txt 8
# the top of the body -- which moves every row this script clicks. What the
# verbs do is what is under test, not the announcement.
config Verbose off
+# its clicks and goldens were laid out by the pardes placement rule
+config Placement pardes
start 31 210 -n 1
wait 8000 w.txt
stable 700 20000
diff --git a/test/snapshots/find.snap b/test/snapshots/find.snap
index fe1ecad3..82c68343 100644
--- a/test/snapshots/find.snap
+++ b/test/snapshots/find.snap
@@ -17,6 +17,8 @@ file sub/ZQMARK-beta.txt beta body
file sub/nest/zqmark-gamma.txt gamma body
file other.txt nothing to match here
file .git/zqmark-hidden.txt hidden body
+# its clicks and goldens were laid out by the pardes placement rule
+config Placement pardes
start 41 120 here.txt
wait 8000 here.txt
stable 700 20000
diff --git a/test/snapshots/fsearch.snap b/test/snapshots/fsearch.snap
index b050f1db..aff3e37f 100644
--- a/test/snapshots/fsearch.snap
+++ b/test/snapshots/fsearch.snap
@@ -13,6 +13,8 @@ file g.txt l1\nMARK a\nl3\nl4\nl5\nMARK b\nl7\nl8\nl9\nMARK c\nl11\nl12
# the top of the body -- which moves every row this script clicks. What the
# verbs do is what is under test, not the announcement.
config Verbose off
+# its clicks and goldens were laid out by the pardes placement rule
+config Placement pardes
start 31 180 -n 3
wait 8000 g.txt
stable 700 20000
diff --git a/test/snapshots/grep.snap b/test/snapshots/grep.snap
index 07777e67..207aedc6 100644
--- a/test/snapshots/grep.snap
+++ b/test/snapshots/grep.snap
@@ -21,6 +21,8 @@ config Verbose off
# The stacked layout spends two rows on each hit, which puts the third one
# below the fold of this results pane; the claim here is which hits there are.
config LocationsConfig layout:inline
+# its clicks and goldens were laid out by the pardes placement rule
+config Placement pardes
start 31 180 -n 3
wait 8000 a.txt
stable 700 20000
diff --git a/test/snapshots/jumps.snap b/test/snapshots/jumps.snap
index e4816f88..74dc5fd7 100644
--- a/test/snapshots/jumps.snap
+++ b/test/snapshots/jumps.snap
@@ -10,6 +10,8 @@
# Focus and position both show in the golden's `cursor=` header: that is the
# ACTIVE pane's cursor, so each snap is named by where it should land.
lines big.txt 200
+# its clicks and goldens were laid out by the pardes placement rule
+config Placement pardes
start 31 150 big.txt
wait 8000 big.txt
stable 700 20000
diff --git a/test/snapshots/layout-close.golden b/test/snapshots/layout-close.golden
index a7d159b5..38985b40 100644
--- a/test/snapshots/layout-close.golden
+++ b/test/snapshots/layout-close.golden
@@ -43,6 +43,7 @@
|10:
|11:
|12:
-== snap colclose grid=140x41 cursor=42,3
-|3: ls 1 ls
+== snap colclose grid=140x41 cursor=38,1
+|2: /tmp/pardes-snap/layout-close/cw /tmp/pardes-snap/layout-close/cwd Tty+bash Save Mode Filter Collaps
+|3: ls ls
|4: marker.txt marker.txt
diff --git a/test/snapshots/layout-close.snap b/test/snapshots/layout-close.snap
index 4ae3e31f..b168eb2b 100644
--- a/test/snapshots/layout-close.snap
+++ b/test/snapshots/layout-close.snap
@@ -1,7 +1,9 @@
# every pane close hands its space to ONE sibling, the rest of the column
# keeps its sizes: Alt-c move-out, tag Del, and shell exit (pty EOF); an
-# emptied column hands its width to one neighbor
+# emptied column stays, as acme's does, its tag over blank space
file marker.txt x
+# its clicks and goldens were laid out by the pardes placement rule
+config Placement pardes
start 41 140 -n 3
wait 8000 marker.txt
stable 700 20000
@@ -49,8 +51,8 @@ text exit
key enter
stable 700 10000
snap exit
-# exit the moved-out pane's shell: its column empties and returns its width to
-# the source column it was carved from; the untouched right column stays put
+# exit the moved-out pane's shell: its column stays where it was, empty, the
+# keyboard on its tag; the other columns keep their widths
press left 40 9
release left 40 9
stable 400 5000
diff --git a/test/snapshots/layout-open.snap b/test/snapshots/layout-open.snap
index 04770f27..c67dcfa5 100644
--- a/test/snapshots/layout-open.snap
+++ b/test/snapshots/layout-open.snap
@@ -5,6 +5,8 @@
# unrelated pane (including the ones above the source) at its exact rectangle.
dirmk sub
file sub/f.txt echo 'TTY'OK
+# its clicks and goldens were laid out by the pardes placement rule
+config Placement pardes
start 31 100 -n 3
wait 8000 sub
stable 700 20000
diff --git a/test/snapshots/leader.snap b/test/snapshots/leader.snap
index 78594a47..e8f42331 100644
--- a/test/snapshots/leader.snap
+++ b/test/snapshots/leader.snap
@@ -1,4 +1,6 @@
file cmds.txt Help
+# its clicks and goldens were laid out by the pardes placement rule
+config Placement pardes
start 41 100 cmds.txt
wait 8000 Newcol Joincol
wait 8000 cmds.txt
diff --git a/test/snapshots/lookpanes.snap b/test/snapshots/lookpanes.snap
index 8ada3f1b..296570f7 100644
--- a/test/snapshots/lookpanes.snap
+++ b/test/snapshots/lookpanes.snap
@@ -24,6 +24,8 @@ file beta/bmark.txt both.txt\nb-marker
# the top of the body -- which moves every row this script clicks. What the
# verbs do is what is under test, not the announcement.
config Verbose off
+# its clicks and goldens were laid out by the pardes placement rule
+config Placement pardes
start 51 130 beta/bmark.txt
wait 8000 b-marker
stable 700 20000
diff --git a/test/snapshots/lookrange.snap b/test/snapshots/lookrange.snap
index 50ef9ad3..ef04409e 100644
--- a/test/snapshots/lookrange.snap
+++ b/test/snapshots/lookrange.snap
@@ -18,6 +18,8 @@ file look.txt r.txt:3-5\nr.txt:7:4-9\nr.txt:3:2-5:3\nr.txt:8:6-99:9
# the top of the body -- which moves every row this script clicks. What the
# verbs do is what is under test, not the announcement.
config Verbose off
+# its clicks and goldens were laid out by the pardes placement rule
+config Placement pardes
start 31 150 look.txt
wait 8000 r.txt:3-5
stable 700 20000
diff --git a/test/snapshots/lsp-client.snap b/test/snapshots/lsp-client.snap
index 541e7c7f..7b255bd8 100644
--- a/test/snapshots/lsp-client.snap
+++ b/test/snapshots/lsp-client.snap
@@ -9,6 +9,8 @@
# gr -> sorted rows, selecting the next occurrence; n/N continue there.
file main.rs mod lib;\n\nfn main() {\n let x = add(1, 2);\n let y = add(3, 4);\n let _ = x + y;\n}\n
file lib.rs // mock fixture\npub fn add(a: i32, b: i32) -> i32 {\n a + b\n}\n
+# its clicks and goldens were laid out by the pardes placement rule
+config Placement pardes
start 25 100 main.rs
wait 8000 add(1, 2)
stable 700 20000
diff --git a/test/snapshots/lsp.snap b/test/snapshots/lsp.snap
index b40484ee..68365527 100644
--- a/test/snapshots/lsp.snap
+++ b/test/snapshots/lsp.snap
@@ -11,6 +11,8 @@
# symbol from std — so these goldens do not encode this machine's stdlib
# version or its install path.
file a.zig const std = @import("std");\n\nfn helper(x: u32) u32 {\n return x + 1;\n}\n\npub fn main() void {\n _ = helper(41);\n}\n
+# its clicks and goldens were laid out by the pardes placement rule
+config Placement pardes
start 41 120 a.zig
wait 8000 helper
stable 700 20000
diff --git a/test/snapshots/lspcomplete.snap b/test/snapshots/lspcomplete.snap
index 53ce7ef9..dcdec45c 100644
--- a/test/snapshots/lspcomplete.snap
+++ b/test/snapshots/lspcomplete.snap
@@ -18,6 +18,8 @@
# script the only end-to-end coverage the feature has.
file a.zig const Shade = enum {\n verdigris,\n cinnabar,\n};\n\nfn pick(s: Shade) u8 {\n return switch (s) {\n \n };\n}\n\n// note. see below\n
file notes.txt abc.def ghi\n
+# its clicks and goldens were laid out by the pardes placement rule
+config Placement pardes
start 41 120 a.zig
wait 8000 verdigris
stable 700 20000
diff --git a/test/snapshots/lsprelpath.snap b/test/snapshots/lsprelpath.snap
index 247390fe..89b0e124 100644
--- a/test/snapshots/lsprelpath.snap
+++ b/test/snapshots/lsprelpath.snap
@@ -30,6 +30,8 @@ file sub/inner/tint.zig pub const Tint = enum {\n ochre,\n indigo,\n};\n
file sub/parent.zig const shade = @import("../shade.zig");\n\npub fn pick(s: shade.Shade) u8 {\n return switch (s) {\n \n };\n}\n
file sub/subdir.zig const tint = @import("inner/tint.zig");\n\npub fn hue(t: tint.Tint) u8 {\n return switch (t) {\n \n };\n}\n
# ---- PARENT: outside the asking file's tree, so the row stays absolute ----
+# its clicks and goldens were laid out by the pardes placement rule
+config Placement pardes
start 35 100 sub/parent.zig
wait 8000 fn pick
stable 700 20000
diff --git a/test/snapshots/mini.snap b/test/snapshots/mini.snap
index 4905c68d..ffa9d94e 100644
--- a/test/snapshots/mini.snap
+++ b/test/snapshots/mini.snap
@@ -1,5 +1,7 @@
file commands.txt @`Mini demo.zig`
file demo.zig const greeting = "café λ 界 é";\n\npub fn choose(ok: bool) u32 {\n if (ok) return 42;\n return 7;\n}\n\n// space and color survive compression\nconst answer = choose(true);\n
+# its clicks and goldens were laid out by the pardes placement rule
+config Placement pardes
start 23 90 commands.txt
wait 8000 Mini demo.zig
stable 400 10000
diff --git a/test/snapshots/nested.snap b/test/snapshots/nested.snap
index c26b7cea..9c31fb00 100644
--- a/test/snapshots/nested.snap
+++ b/test/snapshots/nested.snap
@@ -1,6 +1,8 @@
dirmk nestdir
file nestdir/inside-nested.txt marker
file nested.txt hello-from-nested\nsecond-nested-line\n
+# its clicks and goldens were laid out by the pardes placement rule
+config Placement pardes
start 31 100
wait 8000 $
stable 700 20000
diff --git a/test/snapshots/psearch.snap b/test/snapshots/psearch.snap
index a46e2b9d..f32fdf75 100644
--- a/test/snapshots/psearch.snap
+++ b/test/snapshots/psearch.snap
@@ -12,6 +12,8 @@
# It splits BELOW the shell it came from: every snap below stays ONE column,
# the shell's tag and the +Search tag both starting at x=0, thirty rows split
# between them, and nothing shifts sideways.
+# its clicks and goldens were laid out by the pardes placement rule
+config Placement pardes
start 31 140
wait 8000 Newcol Joincol
stable 700 20000
diff --git a/test/snapshots/reflow.snap b/test/snapshots/reflow.snap
index 7aac1e8c..4a2a5368 100644
--- a/test/snapshots/reflow.snap
+++ b/test/snapshots/reflow.snap
@@ -4,6 +4,8 @@
# integrity check panicked the whole app ("ViewportPinInsufficientRows").
# build.zig now pins the ghostty dependency at ReleaseSafe so those
# development-only checks are off — the app's own safety checks are unchanged.
+# its clicks and goldens were laid out by the pardes placement rule
+config Placement pardes
start 25 40
wait 8000 $
text printf 'y%.0s' $(seq 1 3000); echo do''ne
diff --git a/test/snapshots/rsearch.snap b/test/snapshots/rsearch.snap
index 30459488..a83d27c4 100644
--- a/test/snapshots/rsearch.snap
+++ b/test/snapshots/rsearch.snap
@@ -11,6 +11,8 @@ file code.txt run count_x now\nopen sub/dep.txt:3 here\ncount_x again\npick two
# the top of the body -- which moves every row this script clicks. What the
# verbs do is what is under test, not the announcement.
config Verbose off
+# its clicks and goldens were laid out by the pardes placement rule
+config Placement pardes
start 31 210 -n 1
wait 8000 code.txt
stable 700 20000
diff --git a/test/snapshots/savepane.snap b/test/snapshots/savepane.snap
index 58df13ef..39129347 100644
--- a/test/snapshots/savepane.snap
+++ b/test/snapshots/savepane.snap
@@ -7,6 +7,8 @@
# scratch asks for a path in its inherited dir and makes it a file"); none of
# them can see it drawn, land on the tag rather than the message row, or show
# what the pane becomes afterwards. That is what this script is for.
+# its clicks and goldens were laid out by the pardes placement rule
+config Placement pardes
start 31 100 -n 1
wait 8000 Newcol Joincol
stable 700 20000
diff --git a/test/snapshots/scrolloff.snap b/test/snapshots/scrolloff.snap
index caed9d47..f99c7341 100644
--- a/test/snapshots/scrolloff.snap
+++ b/test/snapshots/scrolloff.snap
@@ -1,6 +1,8 @@
# scrolloff: keyboard motion keeps 3 context rows above/below the cursor,
# clamped at file boundaries (cursor may reach the top/bottom body row there)
lines g.txt 40
+# its clicks and goldens were laid out by the pardes placement rule
+config Placement pardes
start 12 210 -n 1
wait 8000 g.txt
stable 700 20000
diff --git a/test/snapshots/splitparent.snap b/test/snapshots/splitparent.snap
index 1fd4e935..e5595144 100644
--- a/test/snapshots/splitparent.snap
+++ b/test/snapshots/splitparent.snap
@@ -1,6 +1,8 @@
# a new pane never opens under a too-short parent: Alt-n from a tag-only pane
# splits the tall sibling in its column instead; when NO pane could leave the
# newcomer 2 body rows, the tallest one anywhere is split
+# its clicks and goldens were laid out by the pardes placement rule
+config Placement pardes
start 31 100 -n 3
stable 700 20000
# shrink pane 0 (top-left) to just its tagline
diff --git a/test/snapshots/stepgrain.snap b/test/snapshots/stepgrain.snap
index 3c4d3e4c..323fda5c 100644
--- a/test/snapshots/stepgrain.snap
+++ b/test/snapshots/stepgrain.snap
@@ -21,6 +21,8 @@ dirmk sub
file a.txt hello ZQMARK one\nsee also sub/b.txt for ZQMARK two
file sub/b.txt ZQMARK inside sub
run touch 'two words.txt'
+# its clicks and goldens were laid out by the pardes placement rule
+config Placement pardes
start 31 150 a.txt
wait 8000 hello ZQMARK
stable 700 20000
diff --git a/test/snapshots/tagalign.snap b/test/snapshots/tagalign.snap
index a77415d9..7a0c93ce 100644
--- a/test/snapshots/tagalign.snap
+++ b/test/snapshots/tagalign.snap
@@ -2,6 +2,8 @@
dirmk deep
dirmk deep/nested-project-directory
file deep/nested-project-directory/document.txt alpha\nbeta\ngamma
+# its clicks and goldens were laid out by the pardes placement rule
+config Placement pardes
start 31 100 deep/nested-project-directory/document.txt
wait 8000 Newcol Joincol
wait 8000 document.txt
diff --git a/test/snapshots/tagalign2col.snap b/test/snapshots/tagalign2col.snap
index 0849ffae..353289d4 100644
--- a/test/snapshots/tagalign2col.snap
+++ b/test/snapshots/tagalign2col.snap
@@ -2,6 +2,8 @@
dirmk deep
dirmk deep/proj
file deep/proj/document.txt alpha\nbeta\ngamma
+# its clicks and goldens were laid out by the pardes placement rule
+config Placement pardes
start 31 160 deep/proj/document.txt
wait 8000 Newcol Joincol
wait 8000 document.txt
diff --git a/test/snapshots/tagbottom.snap b/test/snapshots/tagbottom.snap
index 67bb2ead..c294a7b6 100644
--- a/test/snapshots/tagbottom.snap
+++ b/test/snapshots/tagbottom.snap
@@ -21,6 +21,8 @@ file bottom.txt ZZONE\nZZTWO
# the top of the body -- which moves every row this script clicks. What the
# verbs do is what is under test, not the announcement.
config Verbose off
+# its clicks and goldens were laid out by the pardes placement rule
+config Placement pardes
start 31 100 top.txt
wait 8000 Newcol Joincol
wait 8000 top.txt
diff --git a/test/snapshots/tagnav.snap b/test/snapshots/tagnav.snap
index f145480e..a0e06cd0 100644
--- a/test/snapshots/tagnav.snap
+++ b/test/snapshots/tagnav.snap
@@ -10,6 +10,8 @@
# carries its BODY mode as one character: ` ` normal, `^` insert, `$` tty. The
# tag has a mode of its own, so the box never changes while a tag is used.
file w.txt alpha\nbeta\ngamma
+# its clicks and goldens were laid out by the pardes placement rule
+config Placement pardes
start 31 100 w.txt
wait 8000 Newcol Joincol
wait 8000 w.txt
diff --git a/test/snapshots/themesel.snap b/test/snapshots/themesel.snap
index 04a95d23..734b9fdd 100644
--- a/test/snapshots/themesel.snap
+++ b/test/snapshots/themesel.snap
@@ -16,6 +16,8 @@
# read with snapstyle, so this proves the generated themes are real data and
# not just names in a list.
lines t.txt 40
+# its clicks and goldens were laid out by the pardes placement rule
+config Placement pardes
start 31 100 t.txt
wait 8000 t.txt
stable 700 20000
diff --git a/test/snapshots/tinywin.snap b/test/snapshots/tinywin.snap
index 3d22d583..388609e4 100644
--- a/test/snapshots/tinywin.snap
+++ b/test/snapshots/tinywin.snap
@@ -2,6 +2,8 @@
# every pane in a column at least one row, so `y` walked off the bottom and
# renderPane got a rect outside the surface (assert). Panes that no longer fit
# now get h = 0 and simply do not render until the window grows back.
+# its clicks and goldens were laid out by the pardes placement rule
+config Placement pardes
start 31 100
wait 8000 $
key a-n
diff --git a/test/snapshots/topbarexec.snap b/test/snapshots/topbarexec.snap
index 516a23b3..9f62af46 100644
--- a/test/snapshots/topbarexec.snap
+++ b/test/snapshots/topbarexec.snap
@@ -14,6 +14,8 @@
# So both halves are pinned here, against the same live selection: the no-arg
# builtin runs, and the arg-taking one still gets the word.
file zmarkfile.txt hay ZQNEEDLE stack
+# its clicks and goldens were laid out by the pardes placement rule
+config Placement pardes
start 21 90 -n 3
wait 8000 zmarkfile.txt
stable 700 20000
diff --git a/test/snapshots/ttyhelp.snap b/test/snapshots/ttyhelp.snap
index 24399848..59e73af2 100644
--- a/test/snapshots/ttyhelp.snap
+++ b/test/snapshots/ttyhelp.snap
@@ -1,6 +1,8 @@
# bare boot = tty mode: SPC belongs to the shell, so the topbar Help word is
# the only route to the command list. Row 0 is not a pane, so a middle-click
# there is dispatched before any pane's mode is consulted.
+# its clicks and goldens were laid out by the pardes placement rule
+config Placement pardes
start 31 100
wait 8000 Newcol Joincol
stable 700 20000
diff --git a/test/snapshots/ttylook.snap b/test/snapshots/ttylook.snap
index 5b82bd89..6eecc419 100644
--- a/test/snapshots/ttylook.snap
+++ b/test/snapshots/ttylook.snap
@@ -9,6 +9,8 @@
lines big.txt 40
file plain.txt just text
dirmk sub
+# its clicks and goldens were laid out by the pardes placement rule
+config Placement pardes
start 31 120 -n 3
wait 8000 big.txt
stable 700 20000
diff --git a/test/snapshots/ttyonly.snap b/test/snapshots/ttyonly.snap
index 1008e084..85180b40 100644
--- a/test/snapshots/ttyonly.snap
+++ b/test/snapshots/ttyonly.snap
@@ -1,5 +1,7 @@
# --tty: a single fullscreen shell already in raw tty mode, prompts visible
file t.txt x
+# its clicks and goldens were laid out by the pardes placement rule
+config Placement pardes
start 31 100 --tty
wait 8000 $
stable 700 20000
diff --git a/test/snapshots/ttytaken.snap b/test/snapshots/ttytaken.snap
index a6ccb632..be0bad29 100644
--- a/test/snapshots/ttytaken.snap
+++ b/test/snapshots/ttytaken.snap
@@ -6,6 +6,8 @@
# the pager's screen changes. (From any pane but a terminal, an Exec always
# runs as a command pane: exec.snap and cmdword.snap.)
lines big.txt 40
+# its clicks and goldens were laid out by the pardes placement rule
+config Placement pardes
start 31 210 -n 1
wait 8000 big.txt
stable 700 20000
diff --git a/test/snapshots/windownav.snap b/test/snapshots/windownav.snap
index 66509e11..fc26896f 100644
--- a/test/snapshots/windownav.snap
+++ b/test/snapshots/windownav.snap
@@ -8,6 +8,8 @@
# `cursor=` header: that is the
# ACTIVE pane's cursor, so each snap is named by the pane it should land in.
file w.txt alpha\nbeta\ngamma
+# its clicks and goldens were laid out by the pardes placement rule
+config Placement pardes
start 31 100 w.txt
wait 8000 Newcol Joincol
wait 8000 w.txt