summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGabriel Schneider <[email protected]>2026-07-06 13:10:53 -0300
committerGabriel Schneider <[email protected]>2026-08-01 15:02:07 -0300
commit04cd5a2b41efd6f39c3ba15c32e60843e2c6485d (patch)
tree55e82e6907041314ebd32bb29ea6844a9cd48c45
parentde4def3548a6729b0dfd2120495a61beef8c8c2c (diff)
downloadpardes-04cd5a2b41efd6f39c3ba15c32e60843e2c6485d.tar.gz
pardes-04cd5a2b41efd6f39c3ba15c32e60843e2c6485d.zip
layout: every pane open/close resizes exactly ONE sibling — never the whole column. Buggy paths fixed: Alt-n inserted a weight-1 shell (whole column reflowed) — now splitBelow the active pane; stackDocLeft (file/image/tutor open with no doc yet) gave the doc a fair share (every pane shrank) — now it halves only the old top pane's slot; ttyForDir (execute from a file pane) appended a weight-1 shell to the rightmost column — now splitBelow its bottom pane; Alt-c moved a pane out without absorbVWeight (all old siblings grew) — now the sibling above absorbs first. Underneath: splitBelow/absorbVWeight/stackDocLeft snap the whole column's weights to on-screen row counts, because computeGeom's per-pane round(avail*w/vsum) let fractional weights jiggle bystanders by a row; evictLonePristineTty recomputes geometry first (a just-stacked doc has no rect). New snap tests layout-open + layout-close cover Alt-n, doc stacking, ttyForDir, Alt-c, tag Del, pty EOF, and column-width handoff. Six goldens regenerated (fileedit, images, look-file, syntax, tutor, windowops): they had frozen the fair-share/append reflow this change removes; every diff is only the doc/split pane sizing, with untouched panes' boundaries restored bit-identical (e.g. bottom pane tag back at its boot row 17 instead of pushed to 22).
-rw-r--r--src/pardes.zig59
-rw-r--r--test/snapshots/fileedit.golden30
-rw-r--r--test/snapshots/images.golden94
-rw-r--r--test/snapshots/layout-close.golden205
-rw-r--r--test/snapshots/layout-close.snap53
-rw-r--r--test/snapshots/layout-open.golden155
-rw-r--r--test/snapshots/layout-open.snap55
-rw-r--r--test/snapshots/look-file.golden28
-rw-r--r--test/snapshots/syntax.golden46
-rw-r--r--test/snapshots/tutor.golden8
-rw-r--r--test/snapshots/windowops.golden58
11 files changed, 640 insertions, 151 deletions
diff --git a/src/pardes.zig b/src/pardes.zig
index c4893b25..13b159aa 100644
--- a/src/pardes.zig
+++ b/src/pardes.zig
@@ -1145,12 +1145,14 @@ pub const Pardes = struct {
nt.greet = true;
const f = p.layoutFindTerm(p.active).?;
p.layoutInsert(f.col, f.idx + 1, free);
+ p.splitBelow(p.active, nt);
p.active = free;
return;
}
if (key.alt and !key.ctrl and key.cp == 'c') {
const f = p.layoutFindTerm(p.active).?;
if (p.ncol < MAX_COLS and p.col_n[f.col] > 1) {
+ p.absorbVWeight(p.active);
p.layoutRemove(p.active);
p.layoutAppendColumn(p.active);
}
@@ -2433,29 +2435,47 @@ pub const Pardes = struct {
p.ncol += 1;
}
- /// Hand a dying pane's vertical weight to ONE sibling (the pane above, or
- /// below for the topmost) so the rest of the column keeps its sizes — the
- /// deletion mirror of splitBelow. Call while `id` is still in the layout.
+ /// Snap every pane in column `c` to its on-screen row count so later
+ /// weight edits move ONLY the panes they name: computeGeom rounds
+ /// round(avail*w/vsum) per pane, and with fractional weights a split or
+ /// absorb elsewhere in the column can jiggle a bystander by a row.
+ fn snapColWeights(p: *Pardes, c: usize) void {
+ for (0..p.col_n[c]) |k| {
+ const pid = p.col_terms[c][k];
+ if (p.panes[pid]) |pp| pp.vweight = @floatFromInt(@max(1, p.rects[pid].h));
+ }
+ }
+
+ /// Hand a dying pane's rows to ONE sibling (the pane above, or below for
+ /// the topmost) so the rest of the column keeps its sizes bit-identical —
+ /// the deletion mirror of splitBelow. Call while `id` is still in the
+ /// layout, with rects current.
fn absorbVWeight(p: *Pardes, id: usize) void {
const f = p.layoutFindTerm(id) orelse return;
if (p.col_n[f.col] <= 1) return;
- const gone = p.panes[id] orelse return;
+ p.snapColWeights(f.col);
const sib = if (f.idx > 0) p.col_terms[f.col][f.idx - 1] else p.col_terms[f.col][f.idx + 1];
- if (p.panes[sib]) |s| s.vweight += gone.vweight;
+ if (p.panes[sib]) |s| s.vweight += @as(f32, @floatFromInt(@max(1, p.rects[id].h)));
}
/// Open a window BELOW `src` (acme-style) without rebalancing the column:
/// shrink ONLY src to its content height (cursor row kept visible) and hand
- /// the freed rows to `nw` — together they fill src's old slot.
+ /// the freed rows to `nw` — together they fill src's old slot and the other
+ /// panes keep their sizes bit-identical (weights snap to row counts).
fn splitBelow(p: *Pardes, src_id: usize, nw: *Pane) void {
const src = p.panes[src_id] orelse return;
const src_h = p.rects[src_id].h;
const body: u16 = if (src_h > BOX_H) src_h - BOX_H else 1;
const cur: u16 = if (src.file != null) body / 2 else @as(u16, @intCast(src.vt.screens.active.cursor.y)) + 1;
const keep = std.math.clamp(cur, 1, @max(1, body -| 1));
- const w = src.vweight;
- src.vweight = w * @as(f32, @floatFromInt(BOX_H + keep)) / @as(f32, @floatFromInt(src_h));
- nw.vweight = w - src.vweight;
+ if (p.layoutFindTerm(src_id)) |f| for (0..p.col_n[f.col]) |k| {
+ const pid = p.col_terms[f.col][k];
+ if (p.panes[pid]) |pp| if (pp != nw) {
+ pp.vweight = @floatFromInt(@max(1, p.rects[pid].h));
+ };
+ };
+ src.vweight = @floatFromInt(BOX_H + keep);
+ nw.vweight = @floatFromInt(@max(1, src_h -| (BOX_H + keep)));
}
/// a shell nobody has touched: no typing, cursor on the first prompt line,
@@ -2482,6 +2502,7 @@ pub const Pardes = struct {
if (n_tty != 1) return;
const tt = p.panes[tty_id] orelse return;
if (!isPristineTty(tt)) return;
+ p.computeGeom(); // a just-stacked doc has no rect yet; absorb snaps to rows
p.absorbVWeight(tty_id);
p.layoutRemove(tty_id);
p.deinitPane(tt);
@@ -2501,6 +2522,7 @@ pub const Pardes = struct {
const nt = p.newShell(free, dir) catch return null;
nt.greet = false;
const rc = if (p.ncol > 0) p.ncol - 1 else 0;
+ if (p.col_n[rc] > 0) p.splitBelow(p.col_terms[rc][p.col_n[rc] - 1], nt);
p.layoutInsert(rc, p.col_n[rc], free);
return free;
}
@@ -2558,18 +2580,17 @@ pub const Pardes = struct {
}
/// stack a fresh doc pane at the top of the LEFT column (acme convention:
- /// files left, terminals right) with a fair share, then evict a leftover
- /// pristine shell
+ /// files left, terminals right), halving ONLY the old top pane's slot so
+ /// the rest of the column keeps its sizes; then evict a leftover pristine
+ /// shell
fn stackDocLeft(p: *Pardes, free: usize, nt: *Pane) void {
const lc = 0;
- const ln = p.col_n[lc];
- if (ln > 0) {
- var vsum: f32 = 0;
- for (0..ln) |i| if (p.panes[p.col_terms[lc][i]]) |pp| {
- vsum += pp.vweight;
- };
- nt.vweight = vsum / @as(f32, @floatFromInt(ln));
- }
+ if (p.col_n[lc] > 0) if (p.panes[p.col_terms[lc][0]]) |top| {
+ p.snapColWeights(lc);
+ const h = p.rects[p.col_terms[lc][0]].h;
+ nt.vweight = @floatFromInt(@max(1, h / 2));
+ top.vweight = @floatFromInt(@max(1, h -| h / 2));
+ };
p.layoutInsert(lc, 0, free);
p.active = free;
p.evictLonePristineTty(lc, free);
diff --git a/test/snapshots/fileedit.golden b/test/snapshots/fileedit.golden
index c6fb40aa..a1709691 100644
--- a/test/snapshots/fileedit.golden
+++ b/test/snapshots/fileedit.golden
@@ -7,9 +7,6 @@
| 4 line 4
| 5 line 5
| 6 line 6
-| 7 line 7
-| 8 line 8
-| 9 line 9
| nm /tmp/pardes-snap/fileedit/cwd Del
|
| f.txt
@@ -18,8 +15,6 @@
|
| f.txt
|
-|
-|
| nm /tmp/pardes-snap/fileedit/cwd Del
|
| f.txt
@@ -29,6 +24,11 @@
|
|
|
+|
+|
+|
+|
+|
== snap deleted grid=100x30 cursor=7,3
|Kill Newcol Tutor Debug Colors NextColor Dump
| nm /tmp/pardes-snap/fileedit/cwd/f.txt Save Del nm /tmp/pardes-snap/fileedit/cwd Del
@@ -38,9 +38,6 @@
| 4 line 5
| 5 line 6
| 6 line 7
-| 7 line 8
-| 8 line 9
-| 9 line 10
| nm /tmp/pardes-snap/fileedit/cwd Del
|
| f.txt
@@ -49,8 +46,6 @@
|
| f.txt
|
-|
-|
| nm /tmp/pardes-snap/fileedit/cwd Del
|
| f.txt
@@ -60,6 +55,11 @@
|
|
|
+|
+|
+|
+|
+|
== snap undone grid=100x30 cursor=7,3
|Kill Newcol Tutor Debug Colors NextColor Dump
| nm /tmp/pardes-snap/fileedit/cwd/f.txt Save Del nm /tmp/pardes-snap/fileedit/cwd Del
@@ -69,9 +69,6 @@
| 4 line 4
| 5 line 5
| 6 line 6
-| 7 line 7
-| 8 line 8
-| 9 line 9
| nm /tmp/pardes-snap/fileedit/cwd Del
|
| f.txt
@@ -80,8 +77,6 @@
|
| f.txt
|
-|
-|
| nm /tmp/pardes-snap/fileedit/cwd Del
|
| f.txt
@@ -91,6 +86,11 @@
|
|
|
+|
+|
+|
+|
+|
== file saved
liEDIT''MEne 1
line 2
diff --git a/test/snapshots/images.golden b/test/snapshots/images.golden
index b6e75fbf..16dc0bac 100644
--- a/test/snapshots/images.golden
+++ b/test/snapshots/images.golden
@@ -1,15 +1,12 @@
== snap img-open grid=100x30 cursor=4,7
|Kill Newcol Tutor Debug Colors NextColor Dump
| img /tmp/pardes-snap/images/cwd/pic.ppm Petscii nm /tmp/pardes-snap/images/cwd Del
-| 🬝🬹
-| 🬝▀█ pic.ppm
-| 🬝▀█
-| 🬝▀█
-| 🬝▀█
-| █🬆█
-| █🬆█
-| █🬆█
-| 🬝🬹█
+| 🬝🬂
+| 🬝🬂█ pic.ppm
+| 🬝🬂█
+| 🬝🬂
+| 🬝🬂█
+|╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌
| nm /tmp/pardes-snap/images/cwd Del
|
| pic.ppm
@@ -18,8 +15,6 @@
|
| pic.ppm
|
-|
-|
| nm /tmp/pardes-snap/images/cwd Del
|
| pic.ppm
@@ -29,29 +24,34 @@
|
|
|
+|
+|
+|
+|
+|
== style img-open
|0: 0-44 #969696,#2c2a3e, 45-99 d,#2c2a3e,
|1: 0-1 d,#6e4fd0, 2-49 #969696,#2c2a3e, 50-51 d,#383c54, 52-85 #969696,#2c2a3e, 86-99 d,#2c2a3e,
-|2: 0-1 d,#2a2a2a, 2-16 d,d, 17-32 #ffffff,#ffffff, 33-33 #ffffff,#352879, 34-34 #352879,#ffffff, 35-49 d,d, 50-51 d,#525252, 52-99 d,d,
-|3: 0-1 d,#2a2a2a, 2-16 d,d, 17-30 #ffffff,#ffffff, 31-32 #ffffff,#352879, 33-33 #352879,#ffffff, 34-34 #352879,#352879, 35-49 d,d, 50-51 d,#525252, 52-99 d,d,
-|4: 0-1 d,#2a2a2a, 2-16 d,d, 17-28 #ffffff,#ffffff, 29-30 #ffffff,#352879, 31-31 #352879,#ffffff, 32-34 #352879,#352879, 35-49 d,d, 50-51 d,#525252, 52-99 d,d,
-|5: 0-1 d,#2a2a2a, 2-16 d,d, 17-26 #ffffff,#ffffff, 27-28 #ffffff,#352879, 29-29 #352879,#ffffff, 30-34 #352879,#352879, 35-49 d,d, 50-51 d,#525252, 52-99 d,d,
-|6: 0-1 d,#2a2a2a, 2-16 d,d, 17-24 #ffffff,#ffffff, 25-26 #ffffff,#352879, 27-27 #352879,#ffffff, 28-34 #352879,#352879, 35-49 d,d, 50-51 d,#525252, 52-99 d,d,
-|7: 0-1 d,#2a2a2a, 2-16 d,d, 17-22 #ffffff,#ffffff, 23-24 #ffffff,#352879, 25-25 #352879,#ffffff, 26-34 #352879,#352879, 35-49 d,d, 50-51 d,#525252, 52-99 d,d,
-|8: 0-1 d,#2a2a2a, 2-16 d,d, 17-20 #ffffff,#ffffff, 21-22 #ffffff,#352879, 23-23 #352879,#ffffff, 24-34 #352879,#352879, 35-49 d,d, 50-51 d,#525252, 52-99 d,d,
-|9: 0-1 d,#2a2a2a, 2-16 d,d, 17-18 #ffffff,#ffffff, 19-20 #ffffff,#352879, 21-21 #352879,#ffffff, 22-34 #352879,#352879, 35-49 d,d, 50-51 d,#525252, 52-99 d,d,
-|10: 0-1 d,#2a2a2a, 2-16 d,d, 17-17 #ffffff,#352879, 18-19 #352879,#ffffff, 20-34 #352879,#352879, 35-49 d,d, 50-51 d,#525252, 52-99 d,d,
-|11: 0-1 d,#383c54, 2-35 #969696,#2c2a3e, 36-49 d,#2c2a3e, 50-51 d,#525252, 52-99 d,d,
+|2: 0-1 d,#2a2a2a, 2-19 d,d, 20-29 #ffffff,#ffffff, 30-31 #ffffff,#6c5eb5, 32-49 d,d, 50-51 d,#525252, 52-99 d,d,
+|3: 0-1 d,#2a2a2a, 2-19 d,d, 20-27 #ffffff,#ffffff, 28-29 #ffffff,#6c5eb5, 30-30 #352879,#ffffff, 31-31 #352879,#352879, 32-49 d,d, 50-51 d,#525252, 52-99 d,d,
+|4: 0-1 d,#2a2a2a, 2-19 d,d, 20-25 #ffffff,#ffffff, 26-27 #ffffff,#6c5eb5, 28-28 #352879,#ffffff, 29-31 #352879,#352879, 32-49 d,d, 50-51 d,#525252, 52-99 d,d,
+|5: 0-1 d,#2a2a2a, 2-19 d,d, 20-23 #ffffff,#ffffff, 24-25 #ffffff,#6c5eb5, 26-31 #352879,#352879, 32-49 d,d, 50-51 d,#525252, 52-99 d,d,
+|6: 0-1 d,#2a2a2a, 2-19 d,d, 20-21 #ffffff,#ffffff, 22-23 #ffffff,#6c5eb5, 24-24 #352879,#ffffff, 25-31 #352879,#352879, 32-49 d,d, 50-51 d,#525252, 52-99 d,d,
+|7: 0-1 d,#2a2a2a, 2-19 d,d, 20-21 #ffffff,#6c5eb5, 22-22 #352879,#ffffff, 23-31 #352879,#352879, 32-49 d,d, 50-51 d,#525252, 52-99 d,d,
+|8: 0-1 d,#383c54, 2-35 #969696,#2c2a3e, 36-49 d,#2c2a3e, 50-51 d,#525252, 52-99 d,d,
+|9: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
+|10: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
+|11: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
|12: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
|13: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
|14: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
|15: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
-|16: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
+|16: 0-1 d,#383c54, 2-35 #969696,#2c2a3e, 36-49 d,#2c2a3e, 50-51 d,#525252, 52-99 d,d,
|17: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
|18: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
|19: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
|20: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
-|21: 0-1 d,#383c54, 2-35 #969696,#2c2a3e, 36-49 d,#2c2a3e, 50-51 d,#525252, 52-99 d,d,
+|21: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
|22: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
|23: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
|24: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
@@ -63,26 +63,26 @@
== style term-palette
|0: 0-44 #969696,#2c2a3e, 45-99 d,#2c2a3e,
|1: 0-1 d,#6e4fd0, 2-49 #969696,#2c2a3e, 50-51 d,#383c54, 52-85 #969696,#2c2a3e, 86-99 d,#2c2a3e,
-|2: 0-1 d,#2a2a2a, 2-16 d,d, 17-32 #ffffff,#ffffff, 33-33 #ffffff,#352879, 34-34 #352879,#ffffff, 35-49 d,d, 50-51 d,#525252, 52-99 d,d,
-|3: 0-1 d,#2a2a2a, 2-16 d,d, 17-30 #ffffff,#ffffff, 31-32 #ffffff,#352879, 33-33 #352879,#ffffff, 34-34 #352879,#352879, 35-49 d,d, 50-51 d,#525252, 52-99 d,d,
-|4: 0-1 d,#2a2a2a, 2-16 d,d, 17-28 #ffffff,#ffffff, 29-30 #ffffff,#352879, 31-31 #352879,#ffffff, 32-34 #352879,#352879, 35-49 d,d, 50-51 d,#525252, 52-99 d,d,
-|5: 0-1 d,#2a2a2a, 2-16 d,d, 17-26 #ffffff,#ffffff, 27-28 #ffffff,#352879, 29-29 #352879,#ffffff, 30-34 #352879,#352879, 35-49 d,d, 50-51 d,#525252, 52-99 d,d,
-|6: 0-1 d,#2a2a2a, 2-16 d,d, 17-24 #ffffff,#ffffff, 25-26 #ffffff,#352879, 27-27 #352879,#ffffff, 28-34 #352879,#352879, 35-49 d,d, 50-51 d,#525252, 52-99 d,d,
-|7: 0-1 d,#2a2a2a, 2-16 d,d, 17-22 #ffffff,#ffffff, 23-24 #ffffff,#352879, 25-25 #352879,#ffffff, 26-34 #352879,#352879, 35-49 d,d, 50-51 d,#525252, 52-99 d,d,
-|8: 0-1 d,#2a2a2a, 2-16 d,d, 17-20 #ffffff,#ffffff, 21-22 #ffffff,#352879, 23-23 #352879,#ffffff, 24-34 #352879,#352879, 35-49 d,d, 50-51 d,#525252, 52-99 d,d,
-|9: 0-1 d,#2a2a2a, 2-16 d,d, 17-18 #ffffff,#ffffff, 19-20 #ffffff,#352879, 21-21 #352879,#ffffff, 22-34 #352879,#352879, 35-49 d,d, 50-51 d,#525252, 52-99 d,d,
-|10: 0-1 d,#2a2a2a, 2-16 d,d, 17-17 #ffffff,#352879, 18-19 #352879,#ffffff, 20-34 #352879,#352879, 35-49 d,d, 50-51 d,#525252, 52-99 d,d,
-|11: 0-1 d,#383c54, 2-35 #969696,#2c2a3e, 36-49 d,#2c2a3e, 50-51 d,#525252, 52-99 d,d,
+|2: 0-1 d,#2a2a2a, 2-19 d,d, 20-29 #ffffff,#ffffff, 30-31 #ffffff,#6c5eb5, 32-49 d,d, 50-51 d,#525252, 52-99 d,d,
+|3: 0-1 d,#2a2a2a, 2-19 d,d, 20-27 #ffffff,#ffffff, 28-29 #ffffff,#6c5eb5, 30-30 #352879,#ffffff, 31-31 #352879,#352879, 32-49 d,d, 50-51 d,#525252, 52-99 d,d,
+|4: 0-1 d,#2a2a2a, 2-19 d,d, 20-25 #ffffff,#ffffff, 26-27 #ffffff,#6c5eb5, 28-28 #352879,#ffffff, 29-31 #352879,#352879, 32-49 d,d, 50-51 d,#525252, 52-99 d,d,
+|5: 0-1 d,#2a2a2a, 2-19 d,d, 20-23 #ffffff,#ffffff, 24-25 #ffffff,#6c5eb5, 26-31 #352879,#352879, 32-49 d,d, 50-51 d,#525252, 52-99 d,d,
+|6: 0-1 d,#2a2a2a, 2-19 d,d, 20-21 #ffffff,#ffffff, 22-23 #ffffff,#6c5eb5, 24-24 #352879,#ffffff, 25-31 #352879,#352879, 32-49 d,d, 50-51 d,#525252, 52-99 d,d,
+|7: 0-1 d,#2a2a2a, 2-19 d,d, 20-21 #ffffff,#6c5eb5, 22-22 #352879,#ffffff, 23-31 #352879,#352879, 32-49 d,d, 50-51 d,#525252, 52-99 d,d,
+|8: 0-1 d,#383c54, 2-35 #969696,#2c2a3e, 36-49 d,#2c2a3e, 50-51 d,#525252, 52-99 d,d,
+|9: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
+|10: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
+|11: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
|12: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
|13: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
|14: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
|15: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
-|16: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
+|16: 0-1 d,#383c54, 2-35 #969696,#2c2a3e, 36-49 d,#2c2a3e, 50-51 d,#525252, 52-99 d,d,
|17: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
|18: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
|19: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
|20: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
-|21: 0-1 d,#383c54, 2-35 #969696,#2c2a3e, 36-49 d,#2c2a3e, 50-51 d,#525252, 52-99 d,d,
+|21: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
|22: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
|23: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
|24: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
@@ -94,26 +94,26 @@
== style no-ascii
|0: 0-44 #969696,#2c2a3e, 45-99 d,#2c2a3e,
|1: 0-1 d,#6e4fd0, 2-49 #969696,#2c2a3e, 50-51 d,#383c54, 52-85 #969696,#2c2a3e, 86-99 d,#2c2a3e,
-|2: 0-1 d,#2a2a2a, 2-16 d,d, 17-32 #ffffff,#ffffff, 33-33 #ffffff,#352879, 34-34 #352879,#ffffff, 35-49 d,d, 50-51 d,#525252, 52-99 d,d,
-|3: 0-1 d,#2a2a2a, 2-16 d,d, 17-30 #ffffff,#ffffff, 31-32 #ffffff,#352879, 33-33 #352879,#ffffff, 34-34 #352879,#352879, 35-49 d,d, 50-51 d,#525252, 52-99 d,d,
-|4: 0-1 d,#2a2a2a, 2-16 d,d, 17-28 #ffffff,#ffffff, 29-30 #ffffff,#352879, 31-31 #352879,#ffffff, 32-34 #352879,#352879, 35-49 d,d, 50-51 d,#525252, 52-99 d,d,
-|5: 0-1 d,#2a2a2a, 2-16 d,d, 17-26 #ffffff,#ffffff, 27-28 #ffffff,#352879, 29-29 #352879,#ffffff, 30-34 #352879,#352879, 35-49 d,d, 50-51 d,#525252, 52-99 d,d,
-|6: 0-1 d,#2a2a2a, 2-16 d,d, 17-24 #ffffff,#ffffff, 25-26 #ffffff,#352879, 27-27 #352879,#ffffff, 28-34 #352879,#352879, 35-49 d,d, 50-51 d,#525252, 52-99 d,d,
-|7: 0-1 d,#2a2a2a, 2-16 d,d, 17-22 #ffffff,#ffffff, 23-24 #ffffff,#352879, 25-25 #352879,#ffffff, 26-34 #352879,#352879, 35-49 d,d, 50-51 d,#525252, 52-99 d,d,
-|8: 0-1 d,#2a2a2a, 2-16 d,d, 17-20 #ffffff,#ffffff, 21-22 #ffffff,#352879, 23-23 #352879,#ffffff, 24-34 #352879,#352879, 35-49 d,d, 50-51 d,#525252, 52-99 d,d,
-|9: 0-1 d,#2a2a2a, 2-16 d,d, 17-18 #ffffff,#ffffff, 19-20 #ffffff,#352879, 21-21 #352879,#ffffff, 22-34 #352879,#352879, 35-49 d,d, 50-51 d,#525252, 52-99 d,d,
-|10: 0-1 d,#2a2a2a, 2-16 d,d, 17-17 #ffffff,#352879, 18-19 #352879,#ffffff, 20-34 #352879,#352879, 35-49 d,d, 50-51 d,#525252, 52-99 d,d,
-|11: 0-1 d,#383c54, 2-35 #969696,#2c2a3e, 36-49 d,#2c2a3e, 50-51 d,#525252, 52-99 d,d,
+|2: 0-1 d,#2a2a2a, 2-19 d,d, 20-29 #ffffff,#ffffff, 30-31 #ffffff,#6c5eb5, 32-49 d,d, 50-51 d,#525252, 52-99 d,d,
+|3: 0-1 d,#2a2a2a, 2-19 d,d, 20-27 #ffffff,#ffffff, 28-29 #ffffff,#6c5eb5, 30-30 #352879,#ffffff, 31-31 #352879,#352879, 32-49 d,d, 50-51 d,#525252, 52-99 d,d,
+|4: 0-1 d,#2a2a2a, 2-19 d,d, 20-25 #ffffff,#ffffff, 26-27 #ffffff,#6c5eb5, 28-28 #352879,#ffffff, 29-31 #352879,#352879, 32-49 d,d, 50-51 d,#525252, 52-99 d,d,
+|5: 0-1 d,#2a2a2a, 2-19 d,d, 20-23 #ffffff,#ffffff, 24-25 #ffffff,#6c5eb5, 26-31 #352879,#352879, 32-49 d,d, 50-51 d,#525252, 52-99 d,d,
+|6: 0-1 d,#2a2a2a, 2-19 d,d, 20-21 #ffffff,#ffffff, 22-23 #ffffff,#6c5eb5, 24-24 #352879,#ffffff, 25-31 #352879,#352879, 32-49 d,d, 50-51 d,#525252, 52-99 d,d,
+|7: 0-1 d,#2a2a2a, 2-19 d,d, 20-21 #ffffff,#6c5eb5, 22-22 #352879,#ffffff, 23-31 #352879,#352879, 32-49 d,d, 50-51 d,#525252, 52-99 d,d,
+|8: 0-1 d,#383c54, 2-35 #969696,#2c2a3e, 36-49 d,#2c2a3e, 50-51 d,#525252, 52-99 d,d,
+|9: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
+|10: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
+|11: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
|12: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
|13: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
|14: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
|15: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
-|16: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
+|16: 0-1 d,#383c54, 2-35 #969696,#2c2a3e, 36-49 d,#2c2a3e, 50-51 d,#525252, 52-99 d,d,
|17: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
|18: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
|19: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
|20: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
-|21: 0-1 d,#383c54, 2-35 #969696,#2c2a3e, 36-49 d,#2c2a3e, 50-51 d,#525252, 52-99 d,d,
+|21: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
|22: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
|23: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
|24: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
diff --git a/test/snapshots/layout-close.golden b/test/snapshots/layout-close.golden
new file mode 100644
index 00000000..9557ec98
--- /dev/null
+++ b/test/snapshots/layout-close.golden
@@ -0,0 +1,205 @@
+== snap built grid=140x40 cursor=4,16
+|Kill Newcol Tutor Debug Colors NextColor Dump
+| nm /tmp/pardes-snap/layout-close/cwd Del nm /tmp/pardes-snap/layout-close/cwd Del
+|
+| marker.txt marker.txt
+|
+| nm /tmp/pardes-snap/layout-close/cwd Del
+|
+| marker.txt
+|
+| nm /tmp/pardes-snap/layout-close/cwd Del
+|
+| marker.txt
+|
+| nm /tmp/pardes-snap/layout-close/cwd Del
+|
+| marker.txt
+|
+|
+|
+|
+|
+| nm /tmp/pardes-snap/layout-close/cwd Del
+|
+| marker.txt
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+== snap altc grid=140x40 cursor=98,4
+|Kill Newcol Tutor Debug Colors NextColor Dump
+| nm /tmp/pardes-snap/layout-close/cwd Del nm /tmp/pardes-snap/layout-close/cwd Del nm /tmp/pardes-snap/layout-close/cwd Del
+|
+| marker.txt marker.txt marker.txt
+|
+| nm /tmp/pardes-snap/layout-close/cwd Del
+|
+| marker.txt
+|
+| nm /tmp/pardes-snap/layout-close/cwd Del
+|
+| marker.txt
+|
+|
+|
+|
+|
+|
+|
+|
+|
+| nm /tmp/pardes-snap/layout-close/cwd Del
+|
+| marker.txt
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+== snap del grid=140x40 cursor=98,4
+|Kill Newcol Tutor Debug Colors NextColor Dump
+| nm /tmp/pardes-snap/layout-close/cwd Del nm /tmp/pardes-snap/layout-close/cwd Del nm /tmp/pardes-snap/layout-close/cwd Del
+|
+| marker.txt marker.txt marker.txt
+|
+|
+|
+|
+|
+| nm /tmp/pardes-snap/layout-close/cwd Del
+|
+| marker.txt
+|
+|
+|
+|
+|
+|
+|
+|
+|
+| nm /tmp/pardes-snap/layout-close/cwd Del
+|
+| marker.txt
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+== snap exit grid=140x40 cursor=4,7
+|Kill Newcol Tutor Debug Colors NextColor Dump
+| nm /tmp/pardes-snap/layout-close/cwd Del nm /tmp/pardes-snap/layout-close/cwd Del nm /tmp/pardes-snap/layout-close/cwd Del
+|
+| marker.txt marker.txt marker.txt
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+| nm /tmp/pardes-snap/layout-close/cwd Del
+|
+| marker.txt
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+== snap colclose grid=140x40 cursor=4,7
+|Kill Newcol Tutor Debug Colors NextColor Dump
+| nm /tmp/pardes-snap/layout-close/cwd Del nm /tmp/pardes-snap/layout-close/cwd Del
+|
+| marker.txt marker.txt
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+| nm /tmp/pardes-snap/layout-close/cwd Del
+|
+| marker.txt
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
diff --git a/test/snapshots/layout-close.snap b/test/snapshots/layout-close.snap
new file mode 100644
index 00000000..63f5cd81
--- /dev/null
+++ b/test/snapshots/layout-close.snap
@@ -0,0 +1,53 @@
+# 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
+file marker.txt x
+start 40 140
+wait 8000 marker.txt
+stable 700 20000
+# build a left column of five: Alt-n three times from pane 0 (active follows
+# the new pane, each split takes from the freshly split pane only)
+press left 5 8
+release left 5 8
+stable 400 5000
+key a-n
+stable 700 15000
+key a-n
+stable 700 15000
+key a-n
+stable 700 15000
+snap built
+# Alt-c: the active (4th) pane moves to a fresh column; the pane above it
+# absorbs its rows, the other three keep theirs (columns reflow horizontally)
+key a-c
+stable 700 15000
+snap altc
+# middle-click Del in the 2nd pane's tag: the pane above absorbs
+press middle 41 6
+release middle 41 6
+stable 700 10000
+snap del
+# exit the (now) 2nd shell (type the command, esc, Tab executes the word):
+# pty EOF, again only the pane above absorbs
+press left 5 14
+release left 5 14
+stable 400 5000
+key i
+text exit
+key esc
+settle 700
+key tab
+stable 700 10000
+snap exit
+# exit the moved-out pane's shell: its column empties and hands its width to
+# the middle column only; the left column's width must not change
+press left 100 8
+release left 100 8
+stable 400 5000
+key i
+text exit
+key esc
+settle 700
+key tab
+stable 700 10000
+snap colclose
diff --git a/test/snapshots/layout-open.golden b/test/snapshots/layout-open.golden
new file mode 100644
index 00000000..2da61d61
--- /dev/null
+++ b/test/snapshots/layout-open.golden
@@ -0,0 +1,155 @@
+== snap before grid=100x30 cursor=4,7
+|Kill Newcol Tutor Debug Colors NextColor Dump
+| nm /tmp/pardes-snap/layout-open/cwd Del nm /tmp/pardes-snap/layout-open/cwd Del
+|
+| sub sub
+|
+|
+|
+| echo one; echo two
+|
+|
+|
+|
+|
+|
+|
+|
+| nm /tmp/pardes-snap/layout-open/cwd Del
+|
+| sub
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+== snap altn-left grid=100x30 cursor=4,8
+|Kill Newcol Tutor Debug Colors NextColor Dump
+| nm /tmp/pardes-snap/layout-open/cwd Del nm /tmp/pardes-snap/layout-open/cwd Del
+|
+| sub sub
+|
+| nm /tmp/pardes-snap/layout-open/cwd Del
+|
+| sub
+|
+|
+|
+|
+|
+|
+|
+|
+| nm /tmp/pardes-snap/layout-open/cwd Del
+|
+| sub
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+== snap altn-right grid=100x30 cursor=54,8
+|Kill Newcol Tutor Debug Colors NextColor Dump
+| nm /tmp/pardes-snap/layout-open/cwd Del nm /tmp/pardes-snap/layout-open/cwd Del
+|
+| sub sub
+|
+| nm /tmp/pardes-snap/layout-open/cwd Del nm /tmp/pardes-snap/layout-open/cwd Del
+|
+| sub sub
+|
+|
+|
+|
+|
+|
+|
+|
+| nm /tmp/pardes-snap/layout-open/cwd Del
+|
+| sub
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+== snap file-open grid=100x30 cursor=7,2
+|Kill Newcol Tutor Debug Colors NextColor Dump
+| nm /tmp/pardes-snap/layout-open/cwd/sub/f.txt Sa nm /tmp/pardes-snap/layout-open/cwd Del
+| 1 echo 'TTY'OK
+| nm /tmp/pardes-snap/layout-open/cwd Del sub
+|
+| nm /tmp/pardes-snap/layout-open/cwd Del nm /tmp/pardes-snap/layout-open/cwd Del
+|
+| sub sub
+|
+|
+|
+|
+|
+|
+|
+|
+| nm /tmp/pardes-snap/layout-open/cwd Del
+|
+| sub
+|
+|
+|
+|
+|
+|
+|
+| sub/f.txt
+|
+|
+|
+== snap ttydir grid=100x30 cursor=7,2
+|Kill Newcol Tutor Debug Colors NextColor Dump
+| nm /tmp/pardes-snap/layout-open/cwd/sub/f.txt Sa nm /tmp/pardes-snap/layout-open/cwd Del
+| 1 echo 'TTY'OK
+| nm /tmp/pardes-snap/layout-open/cwd Del sub
+|
+| nm /tmp/pardes-snap/layout-open/cwd Del nm /tmp/pardes-snap/layout-open/cwd Del
+|
+| sub sub
+|
+| nm /tmp/pardes-snap/layout-open/cwd/sub Del
+| echo 'TTY'OK
+|
+| TTYOK
+|
+|
+|
+| nm /tmp/pardes-snap/layout-open/cwd Del
+|
+| sub
+|
+|
+|
+|
+|
+|
+|
+| sub/f.txt
+|
+|
+|
diff --git a/test/snapshots/layout-open.snap b/test/snapshots/layout-open.snap
new file mode 100644
index 00000000..773cf70d
--- /dev/null
+++ b/test/snapshots/layout-open.snap
@@ -0,0 +1,55 @@
+# every pane open splits ONE existing pane, the rest of the column keeps its
+# sizes: Alt-n splits the active pane, a looked-up file stacking top-left
+# splits only the old top pane, an execute-spawned shell for a file's dir
+# splits only the bottom pane of the rightmost column
+dirmk sub
+file sub/f.txt echo 'TTY'OK
+start 30 100
+wait 8000 sub
+stable 700 20000
+# give pane 0 (top-left) some content so its content-height split is visible
+press left 5 8
+release left 5 8
+stable 400 5000
+key i
+text echo one; echo two
+key enter
+key esc
+settle 700
+stable 400 5000
+snap before
+# Alt-n: new shell below pane 0 — the bottom pane's boundary must not move
+key a-n
+stable 700 15000
+snap altn-left
+# make the right column two panes (Alt-n in a fresh column, trivial split)
+press left 70 8
+release left 70 8
+stable 400 5000
+key a-n
+stable 700 15000
+snap altn-right
+# look sub/f.txt from the bottom-left shell: the doc stacks at the top of the
+# left column, splitting only the old top pane — lower boundaries must not move
+press left 5 27
+release left 5 27
+stable 400 5000
+key i
+text sub/f.txt
+key esc
+settle 700
+stable 400 5000
+press right 7 27
+release right 7 27
+stable 700 15000
+snap file-open
+# execute the file's command (middle drag over line 1): no shell has cwd sub/,
+# so one is forked at the bottom of the rightmost column, splitting only the
+# pane above it
+press middle 8 3
+drag middle 19 3
+release middle 19 3
+wait 10000 TTYOK
+motion 40 25
+stable 700 10000
+snap ttydir
diff --git a/test/snapshots/look-file.golden b/test/snapshots/look-file.golden
index 4f6d4a71..9258cfdb 100644
--- a/test/snapshots/look-file.golden
+++ b/test/snapshots/look-file.golden
@@ -6,10 +6,7 @@
| 42 line 42
| 43 line 43
| 44 line 44
-| 45 line 45
-| 46 line 46
-| 47 line 47
-| 48 line 48
+|╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌
| nm /tmp/pardes-snap/look-file/cwd Del
|
| big.txt
@@ -18,8 +15,6 @@
|
| big.txt:40
|
-|
-|
| nm /tmp/pardes-snap/look-file/cwd Del
|
| big.txt
@@ -29,29 +24,34 @@
|
|
|
+|
+|
+|
+|
+|
== style file-open
|0: 0-44 #969696,#2c2a3e, 45-99 d,#2c2a3e,
|1: 0-1 d,#6e4fd0, 2-49 #969696,#2c2a3e, 50-51 d,#383c54, 52-88 #969696,#2c2a3e, 89-99 d,#2c2a3e,
|2: 0-1 d,#2a2a2a, 2-6 #5a5a5a,d, 7-49 d,d, 50-51 d,#525252, 52-99 d,d,
|3: 0-1 d,#2a2a2a, 2-6 #5a5a5a,d, 7-49 d,d, 50-51 d,#525252, 52-99 d,d,
|4: 0-1 d,#2a2a2a, 2-6 #5a5a5a,d, 7-49 d,d, 50-51 d,#525252, 52-99 d,d,
-|5: 0-1 d,#2a2a2a, 2-6 #5a5a5a,d, 7-49 d,d, 50-51 d,#525252, 52-99 d,d,
+|5: 0-1 d,#525252, 2-6 #5a5a5a,d, 7-49 d,d, 50-51 d,#525252, 52-99 d,d,
|6: 0-1 d,#2a2a2a, 2-6 #5a5a5a,d, 7-49 d,d, 50-51 d,#525252, 52-99 d,d,
-|7: 0-1 d,#525252, 2-6 #5a5a5a,d, 7-49 d,d, 50-51 d,#525252, 52-99 d,d,
-|8: 0-1 d,#2a2a2a, 2-6 #5a5a5a,d, 7-49 d,d, 50-51 d,#525252, 52-99 d,d,
-|9: 0-1 d,#2a2a2a, 2-6 #5a5a5a,d, 7-49 d,d, 50-51 d,#525252, 52-99 d,d,
-|10: 0-1 d,#2a2a2a, 2-6 #5a5a5a,d, 7-49 d,d, 50-51 d,#525252, 52-99 d,d,
-|11: 0-1 d,#383c54, 2-38 #969696,#2c2a3e, 39-49 d,#2c2a3e, 50-51 d,#525252, 52-99 d,d,
+|7: 0-1 d,#2a2a2a, 2-6 #5a5a5a,d, 7-49 d,d, 50-51 d,#525252, 52-99 d,d,
+|8: 0-1 d,#383c54, 2-38 #969696,#2c2a3e, 39-49 d,#2c2a3e, 50-51 d,#525252, 52-99 d,d,
+|9: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
+|10: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
+|11: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
|12: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
|13: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
|14: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
|15: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
-|16: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
+|16: 0-1 d,#383c54, 2-38 #969696,#2c2a3e, 39-49 d,#2c2a3e, 50-51 d,#525252, 52-99 d,d,
|17: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
|18: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
|19: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
|20: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
-|21: 0-1 d,#383c54, 2-38 #969696,#2c2a3e, 39-49 d,#2c2a3e, 50-51 d,#525252, 52-99 d,d,
+|21: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
|22: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
|23: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
|24: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
diff --git a/test/snapshots/syntax.golden b/test/snapshots/syntax.golden
index 310d6d64..80ef3525 100644
--- a/test/snapshots/syntax.golden
+++ b/test/snapshots/syntax.golden
@@ -6,24 +6,24 @@
| 3 var x: u32 = 42;
| 4 _ = x;
| 5 }
+|╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌
+| nm /tmp/pardes-snap/syntax/cwd Del
|
+| demo.zig
|
|
|
+| demo.zig
+|
| nm /tmp/pardes-snap/syntax/cwd Del
|
| demo.zig
|
|
|
-| demo.zig
|
|
|
-| nm /tmp/pardes-snap/syntax/cwd Del
-|
-| demo.zig
-|
|
|
|
@@ -38,20 +38,20 @@
|5: 0-1 d,#525252, 2-6 #5a5a5a,d, 7-49 d,d, 50-51 d,#525252, 52-99 d,d,
|6: 0-1 d,#525252, 2-6 #5a5a5a,d, 7-49 d,d, 50-51 d,#525252, 52-99 d,d,
|7: 0-1 d,#525252, 2-6 #5a5a5a,d, 7-49 d,d, 50-51 d,#525252, 52-99 d,d,
-|8: 0-1 d,#525252, 2-6 #5a5a5a,d, 7-49 d,d, 50-51 d,#525252, 52-99 d,d,
-|9: 0-1 d,#525252, 2-6 #5a5a5a,d, 7-49 d,d, 50-51 d,#525252, 52-99 d,d,
-|10: 0-1 d,#525252, 2-6 #5a5a5a,d, 7-49 d,d, 50-51 d,#525252, 52-99 d,d,
-|11: 0-1 d,#383c54, 2-35 #969696,#2c2a3e, 36-49 d,#2c2a3e, 50-51 d,#525252, 52-99 d,d,
+|8: 0-1 d,#383c54, 2-35 #969696,#2c2a3e, 36-49 d,#2c2a3e, 50-51 d,#525252, 52-99 d,d,
+|9: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
+|10: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
+|11: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
|12: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
|13: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
|14: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
|15: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
-|16: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
+|16: 0-1 d,#383c54, 2-35 #969696,#2c2a3e, 36-49 d,#2c2a3e, 50-51 d,#525252, 52-99 d,d,
|17: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
|18: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
|19: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
|20: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
-|21: 0-1 d,#383c54, 2-35 #969696,#2c2a3e, 36-49 d,#2c2a3e, 50-51 d,#525252, 52-99 d,d,
+|21: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
|22: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
|23: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
|24: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
@@ -69,20 +69,20 @@
|5: 0-1 d,#525252, 2-6 #5a5a5a,d, 7-49 d,d, 50-51 d,#525252, 52-99 d,d,
|6: 0-1 d,#525252, 2-6 #5a5a5a,d, 7-49 d,d, 50-51 d,#525252, 52-99 d,d,
|7: 0-1 d,#525252, 2-6 #5a5a5a,d, 7-49 d,d, 50-51 d,#525252, 52-99 d,d,
-|8: 0-1 d,#525252, 2-6 #5a5a5a,d, 7-49 d,d, 50-51 d,#525252, 52-99 d,d,
-|9: 0-1 d,#525252, 2-6 #5a5a5a,d, 7-49 d,d, 50-51 d,#525252, 52-99 d,d,
-|10: 0-1 d,#525252, 2-6 #5a5a5a,d, 7-49 d,d, 50-51 d,#525252, 52-99 d,d,
-|11: 0-1 d,#383c54, 2-35 #969696,#2c2a3e, 36-49 d,#2c2a3e, 50-51 d,#525252, 52-99 d,d,
+|8: 0-1 d,#383c54, 2-35 #969696,#2c2a3e, 36-49 d,#2c2a3e, 50-51 d,#525252, 52-99 d,d,
+|9: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
+|10: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
+|11: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
|12: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
|13: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
|14: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
|15: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
-|16: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
+|16: 0-1 d,#383c54, 2-35 #969696,#2c2a3e, 36-49 d,#2c2a3e, 50-51 d,#525252, 52-99 d,d,
|17: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
|18: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
|19: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
|20: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
-|21: 0-1 d,#383c54, 2-35 #969696,#2c2a3e, 36-49 d,#2c2a3e, 50-51 d,#525252, 52-99 d,d,
+|21: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
|22: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
|23: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
|24: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
@@ -100,20 +100,20 @@
|5: 0-1 d,#525252, 2-6 #5a5a5a,d, 7-49 d,d, 50-51 d,#525252, 52-99 d,d,
|6: 0-1 d,#525252, 2-6 #5a5a5a,d, 7-49 d,d, 50-51 d,#525252, 52-99 d,d,
|7: 0-1 d,#525252, 2-6 #5a5a5a,d, 7-49 d,d, 50-51 d,#525252, 52-99 d,d,
-|8: 0-1 d,#525252, 2-6 #5a5a5a,d, 7-49 d,d, 50-51 d,#525252, 52-99 d,d,
-|9: 0-1 d,#525252, 2-6 #5a5a5a,d, 7-49 d,d, 50-51 d,#525252, 52-99 d,d,
-|10: 0-1 d,#525252, 2-6 #5a5a5a,d, 7-49 d,d, 50-51 d,#525252, 52-99 d,d,
-|11: 0-1 d,#383c54, 2-35 #969696,#2c2a3e, 36-49 d,#2c2a3e, 50-51 d,#525252, 52-99 d,d,
+|8: 0-1 d,#383c54, 2-35 #969696,#2c2a3e, 36-49 d,#2c2a3e, 50-51 d,#525252, 52-99 d,d,
+|9: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
+|10: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
+|11: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
|12: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
|13: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
|14: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
|15: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
-|16: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
+|16: 0-1 d,#383c54, 2-35 #969696,#2c2a3e, 36-49 d,#2c2a3e, 50-51 d,#525252, 52-99 d,d,
|17: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
|18: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
|19: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
|20: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
-|21: 0-1 d,#383c54, 2-35 #969696,#2c2a3e, 36-49 d,#2c2a3e, 50-51 d,#525252, 52-99 d,d,
+|21: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
|22: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
|23: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
|24: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
diff --git a/test/snapshots/tutor.golden b/test/snapshots/tutor.golden
index 55d66c9b..aa000798 100644
--- a/test/snapshots/tutor.golden
+++ b/test/snapshots/tutor.golden
@@ -7,9 +7,6 @@
| 4
| 5 The model is acme's: EVERYTHING is
| 6 the same way. Modal editing (helix-
-| 7 Press j until you reach the introdu
-| 8
-| 9
| nm /tmp/pardes-snap/tutor/cwd Del
|
|
@@ -18,9 +15,12 @@
|
|
|
+| nm /tmp/pardes-snap/tutor/cwd Del
+|
+|
+|
|
|
-| nm /tmp/pardes-snap/tutor/cwd Del
|
|
|
diff --git a/test/snapshots/windowops.golden b/test/snapshots/windowops.golden
index 061ceca9..5357ac7a 100644
--- a/test/snapshots/windowops.golden
+++ b/test/snapshots/windowops.golden
@@ -215,7 +215,7 @@
|
|
|
-== snap altn grid=100x30 cursor=4,23
+== snap altn grid=100x30 cursor=4,19
|Kill Newcol Tutor Debug Colors NextColor Dump
| nm /tmp/pardes-snap/windowops/cwd Del nm /tmp/pardes-snap/windowops/cwd Del
|
@@ -224,21 +224,21 @@
|
|
|
-| nm /tmp/pardes-snap/windowops/cwd Del
|
-| w.txt
|
|
|
+| nm /tmp/pardes-snap/windowops/cwd Del
|
+| w.txt
|
+| nm /tmp/pardes-snap/windowops/cwd Del
|
+| w.txt
|
|
|
-| nm /tmp/pardes-snap/windowops/cwd Del
|
-| w.txt
|
|
|
@@ -246,7 +246,7 @@
|
|
|
-== snap focus-left grid=100x30 cursor=4,23
+== snap focus-left grid=100x30 cursor=4,19
|Kill Newcol Tutor Debug Colors NextColor Dump
| nm /tmp/pardes-snap/windowops/cwd Del nm /tmp/pardes-snap/windowops/cwd Del
|
@@ -255,21 +255,21 @@
|
|
|
-| nm /tmp/pardes-snap/windowops/cwd Del
|
-| w.txt
|
|
|
+| nm /tmp/pardes-snap/windowops/cwd Del
|
+| w.txt
|
+| nm /tmp/pardes-snap/windowops/cwd Del
|
+| w.txt
|
|
|
-| nm /tmp/pardes-snap/windowops/cwd Del
|
-| w.txt
|
|
|
@@ -277,30 +277,30 @@
|
|
|
-== snap debug-on grid=100x30 cursor=4,23
+== snap debug-on grid=100x30 cursor=4,19
|Kill Newcol Tutor Debug Colors NextColor Dump
| nm /tmp/pardes-snap/windowops/cwd Del nm /tmp/pardes-snap/windowop╭────────────────────────────╮
| │pardes resizes=1 │
| w.txt w.txt │terms 4 cols 2 │
-| │active #3 38x9 │
-| │scroll 0/9 │
+| │active #3 38x13 │
+| │scroll 0/13 │
| │pinch 1.0000 │
| │tscroll 0.0000 │
-| nm /tmp/pardes-snap/windowops/cwd Del ╰────────────────────────────╯
-|
-| w.txt
+| ╰────────────────────────────╯
|
|
|
+| nm /tmp/pardes-snap/windowops/cwd Del
|
+| w.txt
|
+| nm /tmp/pardes-snap/windowops/cwd Del
|
+| w.txt
|
|
|
-| nm /tmp/pardes-snap/windowops/cwd Del
|
-| w.txt
|
|
|
@@ -313,23 +313,23 @@
|1: 0-1 d,#383c54, 2-38 #969696,#2c2a3e, 39-39 d,#2c2a3e, 40-41 d,#383c54, 42-69 #969696,#2c2a3e, 70-99 d,d,
|2: 0-1 d,#525252, 2-39 d,d, 40-41 d,#525252, 42-70 d,d, 71-87 #969696,d, 88-98 d,#2a2a2a, 99-99 d,d,
|3: 0-1 d,#525252, 2-39 d,d, 40-41 d,#525252, 42-70 d,d, 71-85 #969696,d, 86-98 d,#2a2a2a, 99-99 d,d,
-|4: 0-1 d,#525252, 2-39 d,d, 40-41 d,#525252, 42-70 d,d, 71-85 #969696,d, 86-98 d,#2a2a2a, 99-99 d,d,
-|5: 0-1 d,#525252, 2-39 d,d, 40-41 d,#525252, 42-70 d,d, 71-80 #969696,d, 81-98 d,#2a2a2a, 99-99 d,d,
+|4: 0-1 d,#525252, 2-39 d,d, 40-41 d,#525252, 42-70 d,d, 71-86 #969696,d, 87-98 d,#2a2a2a, 99-99 d,d,
+|5: 0-1 d,#525252, 2-39 d,d, 40-41 d,#525252, 42-70 d,d, 71-81 #969696,d, 82-98 d,#2a2a2a, 99-99 d,d,
|6: 0-1 d,#525252, 2-39 d,d, 40-41 d,#525252, 42-70 d,d, 71-83 #969696,d, 84-98 d,#2a2a2a, 99-99 d,d,
|7: 0-1 d,#525252, 2-39 d,d, 40-41 d,#525252, 42-70 d,d, 71-85 #969696,d, 86-98 d,#2a2a2a, 99-99 d,d,
-|8: 0-1 d,#383c54, 2-38 #969696,#2c2a3e, 39-39 d,#2c2a3e, 40-41 d,#525252, 42-99 d,d,
+|8: 0-1 d,#525252, 2-39 d,d, 40-41 d,#525252, 42-99 d,d,
|9: 0-1 d,#525252, 2-39 d,d, 40-41 d,#525252, 42-99 d,d,
|10: 0-1 d,#525252, 2-39 d,d, 40-41 d,#525252, 42-99 d,d,
|11: 0-1 d,#525252, 2-39 d,d, 40-41 d,#525252, 42-99 d,d,
-|12: 0-1 d,#525252, 2-39 d,d, 40-41 d,#525252, 42-99 d,d,
+|12: 0-1 d,#383c54, 2-38 #969696,#2c2a3e, 39-39 d,#2c2a3e, 40-41 d,#525252, 42-99 d,d,
|13: 0-1 d,#525252, 2-39 d,d, 40-41 d,#525252, 42-99 d,d,
|14: 0-1 d,#525252, 2-39 d,d, 40-41 d,#525252, 42-99 d,d,
|15: 0-1 d,#525252, 2-39 d,d, 40-41 d,#525252, 42-99 d,d,
-|16: 0-1 d,#525252, 2-39 d,d, 40-41 d,#525252, 42-99 d,d,
+|16: 0-1 d,#6e4fd0, 2-38 #969696,#2c2a3e, 39-39 d,#2c2a3e, 40-41 d,#525252, 42-99 d,d,
|17: 0-1 d,#525252, 2-39 d,d, 40-41 d,#525252, 42-99 d,d,
|18: 0-1 d,#525252, 2-39 d,d, 40-41 d,#525252, 42-99 d,d,
|19: 0-1 d,#525252, 2-39 d,d, 40-41 d,#525252, 42-99 d,d,
-|20: 0-1 d,#6e4fd0, 2-38 #969696,#2c2a3e, 39-39 d,#2c2a3e, 40-41 d,#525252, 42-99 d,d,
+|20: 0-1 d,#525252, 2-39 d,d, 40-41 d,#525252, 42-99 d,d,
|21: 0-1 d,#525252, 2-39 d,d, 40-41 d,#525252, 42-99 d,d,
|22: 0-1 d,#525252, 2-39 d,d, 40-41 d,#525252, 42-99 d,d,
|23: 0-1 d,#525252, 2-39 d,d, 40-41 d,#525252, 42-99 d,d,
@@ -339,7 +339,7 @@
|27: 0-1 d,#525252, 2-39 d,d, 40-41 d,#525252, 42-99 d,d,
|28: 0-1 d,#525252, 2-39 d,d, 40-41 d,#525252, 42-99 d,d,
|29: 0-1 d,#525252, 2-39 d,d, 40-41 d,#525252, 42-99 d,d,
-== snap debug-off grid=100x30 cursor=4,23
+== snap debug-off grid=100x30 cursor=4,19
|Kill Newcol Tutor Debug Colors NextColor Dump
| nm /tmp/pardes-snap/windowops/cwd Del nm /tmp/pardes-snap/windowops/cwd Del
|
@@ -348,21 +348,21 @@
|
|
|
-| nm /tmp/pardes-snap/windowops/cwd Del
|
-| w.txt
|
|
|
+| nm /tmp/pardes-snap/windowops/cwd Del
|
+| w.txt
|
+| nm /tmp/pardes-snap/windowops/cwd Del
|
+| w.txt
|
|
|
-| nm /tmp/pardes-snap/windowops/cwd Del
|
-| w.txt
|
|
|