summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
Diffstat (limited to 'test')
-rw-r--r--test/e2e_harness.zig37
-rw-r--r--test/snapshot.zig63
-rw-r--r--test/snapshots/boot.golden8
-rw-r--r--test/snapshots/cursorline.golden124
-rw-r--r--test/snapshots/cursorline.snap25
-rw-r--r--test/snapshots/dump.actual63
-rw-r--r--test/snapshots/dump.golden6
-rw-r--r--test/snapshots/edit.actual62
-rw-r--r--test/snapshots/edit.golden8
-rw-r--r--test/snapshots/exec-bigdrag.golden61
-rw-r--r--test/snapshots/exec-bigdrag.snap40
-rw-r--r--test/snapshots/exec.golden14
-rw-r--r--test/snapshots/exec.snap4
-rw-r--r--test/snapshots/fileedit.golden42
-rw-r--r--test/snapshots/fileedit.snap6
-rw-r--r--test/snapshots/fsearch.golden310
-rw-r--r--test/snapshots/fsearch.snap63
-rw-r--r--test/snapshots/ghostty-mid.golden31
-rw-r--r--test/snapshots/ghostty-mid.snap32
-rw-r--r--test/snapshots/images.golden104
-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/load.golden8
-rw-r--r--test/snapshots/look-center.golden93
-rw-r--r--test/snapshots/look-center.snap28
-rw-r--r--test/snapshots/look-dir.actual31
-rw-r--r--test/snapshots/look-dir.golden6
-rw-r--r--test/snapshots/look-file.golden44
-rw-r--r--test/snapshots/modal.golden48
-rw-r--r--test/snapshots/respawn.golden31
-rw-r--r--test/snapshots/respawn.snap21
-rw-r--r--test/snapshots/scroll.golden24
-rw-r--r--test/snapshots/scrolloff.golden217
-rw-r--r--test/snapshots/scrolloff.snap41
-rw-r--r--test/snapshots/syntax.actual124
-rw-r--r--test/snapshots/syntax.golden62
-rw-r--r--test/snapshots/tag.golden38
-rw-r--r--test/snapshots/theme.golden24
-rw-r--r--test/snapshots/tty.golden12
-rw-r--r--test/snapshots/ttylook.golden279
-rw-r--r--test/snapshots/ttylook.snap77
-rw-r--r--test/snapshots/ttyonly.golden4
-rw-r--r--test/snapshots/tutor.golden12
-rw-r--r--test/snapshots/windowops.golden96
46 files changed, 2267 insertions, 624 deletions
diff --git a/test/e2e_harness.zig b/test/e2e_harness.zig
index 6354aa4b..9099f13e 100644
--- a/test/e2e_harness.zig
+++ b/test/e2e_harness.zig
@@ -1,8 +1,11 @@
const std = @import("std");
const posix = std.posix;
-const linux = std.os.linux;
+const libc = std.c;
const ghostty_vt = @import("ghostty-vt");
+// TIOCSWINSZ: absent from std.c.T on darwin — _IOW('t', 103, winsize)
+const TIOCSWINSZ: c_int = @bitCast(@as(u32, if (@hasDecl(posix.T, "IOCSWINSZ")) posix.T.IOCSWINSZ else 0x80087467));
+
extern "c" fn forkpty(
amaster: *c_int,
name: ?[*:0]u8,
@@ -13,9 +16,9 @@ extern "c" fn execvp(file: [*:0]const u8, argv: [*:null]const ?[*:0]const u8) c_
extern "c" fn _exit(status: c_int) noreturn;
fn nowMs() i64 {
- var ts: linux.timespec = undefined;
- _ = linux.clock_gettime(linux.CLOCK.MONOTONIC, &ts);
- return ts.sec * 1000 + @divFloor(@as(i64, ts.nsec), 1_000_000);
+ var ts: libc.timespec = undefined;
+ _ = libc.clock_gettime(.MONOTONIC, &ts);
+ return @as(i64, @intCast(ts.sec)) * 1000 + @divFloor(@as(i64, @intCast(ts.nsec)), 1_000_000);
}
/// E2E test harness: forks the app in a pty and parses its output with a
@@ -92,7 +95,7 @@ pub const Harness = struct {
pub fn deinit(self: *Harness) void {
posix.kill(self.pid, posix.SIG.KILL) catch {};
- _ = linux.close(self.master);
+ _ = libc.close(self.master);
self.stream.deinit();
self.raw.deinit(self.gpa);
self.term.deinit(self.gpa);
@@ -103,10 +106,9 @@ pub const Harness = struct {
pub fn send(self: *Harness, bytes: []const u8) !void {
var off: usize = 0;
while (off < bytes.len) {
- const rc = linux.write(self.master, bytes[off..].ptr, bytes.len - off);
- const n: isize = @bitCast(rc);
+ const n = libc.write(self.master, bytes[off..].ptr, bytes.len - off);
if (n < 0) {
- if (n == -@as(isize, @intFromEnum(linux.E.INTR))) continue;
+ if (libc.errno(n) == .INTR) continue;
return error.WriteFailed;
}
off += @intCast(n);
@@ -139,7 +141,7 @@ pub const Harness = struct {
self.cols = cols;
self.term.resize(self.gpa, cols, rows) catch {};
const ws = posix.winsize{ .row = rows, .col = cols, .xpixel = 0, .ypixel = 0 };
- _ = posix.system.ioctl(self.master, posix.T.IOCSWINSZ, @intFromPtr(&ws));
+ _ = posix.system.ioctl(self.master, TIOCSWINSZ, @intFromPtr(&ws));
}
/// The full viewport text (plainString), newline-joined rows. Caller frees.
@@ -261,18 +263,15 @@ pub const Harness = struct {
}
};
-/// Write a file (helper for test setup, raw linux syscalls).
+/// Write a file (helper for test setup, raw libc).
pub fn writeFile(path: [*:0]const u8, data: []const u8) !void {
- const rc = linux.open(path, .{ .ACCMODE = .WRONLY, .CREAT = true, .TRUNC = true }, 0o644);
- const sfd: isize = @bitCast(rc);
- if (sfd < 0) return error.OpenFailed;
- const fd: c_int = @intCast(sfd);
- defer _ = linux.close(fd);
+ const fd = libc.open(path, .{ .ACCMODE = .WRONLY, .CREAT = true, .TRUNC = true }, @as(libc.mode_t, 0o644));
+ if (fd < 0) return error.OpenFailed;
+ defer _ = libc.close(fd);
var off: usize = 0;
while (off < data.len) {
- const w = linux.write(fd, data[off..].ptr, data.len - off);
- const sw: isize = @bitCast(w);
- if (sw <= 0) break;
- off += @intCast(sw);
+ const w = libc.write(fd, data[off..].ptr, data.len - off);
+ if (w <= 0) break;
+ off += @intCast(w);
}
}
diff --git a/test/snapshot.zig b/test/snapshot.zig
index c1bf03c0..10aa0c86 100644
--- a/test/snapshot.zig
+++ b/test/snapshot.zig
@@ -28,8 +28,7 @@
// snap <label> capture grid text + cursor
// snapstyle <label> capture per-cell style runs (fg,bg,attrs)
const std = @import("std");
-const posix = std.posix;
-const linux = std.os.linux;
+const libc = std.c;
const ghostty_vt = @import("ghostty-vt");
const eh = @import("e2e_harness.zig");
@@ -48,9 +47,8 @@ pub fn main(init: std.process.Init) !void {
// argv: exe-under-test, then flags/scripts. All paths made absolute up
// front because runScript chdirs into a per-script workdir.
var cwd_buf: [4096]u8 = undefined;
- const cwd_rc: isize = @bitCast(linux.getcwd(&cwd_buf, cwd_buf.len));
- if (cwd_rc <= 0) fatal("getcwd failed", .{});
- const orig_cwd = cwd_buf[0..@intCast(cwd_rc - 1)];
+ const cwd_p = libc.getcwd(&cwd_buf, cwd_buf.len) orelse fatal("getcwd failed", .{});
+ const orig_cwd = std.mem.span(@as([*:0]u8, @ptrCast(cwd_p)));
var exe: ?[]const u8 = null;
var update = false;
@@ -461,41 +459,26 @@ fn absPath(arena: std.mem.Allocator, cwd: []const u8, p: []const u8) ![]const u8
fn listSnaps(arena: std.mem.Allocator, dir_path: []const u8, scripts: *std.ArrayList([]const u8)) !void {
const dir_z = try arena.dupeZ(u8, dir_path);
- const rc = linux.open(dir_z, .{ .ACCMODE = .RDONLY, .DIRECTORY = true }, 0);
- const sfd: isize = @bitCast(rc);
- if (sfd < 0) fatal("no snapshots/ dir at {s}", .{dir_path});
- const fd: i32 = @intCast(sfd);
- defer _ = linux.close(fd);
- var buf: [8192]u8 align(@alignOf(linux.dirent64)) = undefined;
- while (true) {
- const r = linux.getdents64(fd, &buf, buf.len);
- const n: isize = @bitCast(r);
- if (n <= 0) break;
- var off: usize = 0;
- while (off < @as(usize, @intCast(n))) {
- const d: *align(1) linux.dirent64 = @ptrCast(&buf[off]);
- const name = std.mem.span(@as([*:0]const u8, @ptrCast(&d.name)));
- if (std.mem.endsWith(u8, name, ".snap"))
- try scripts.append(arena, try std.fmt.allocPrint(arena, "{s}/{s}", .{ dir_path, name }));
- off += d.reclen;
- }
+ const dir = libc.opendir(dir_z) orelse fatal("no snapshots/ dir at {s}", .{dir_path});
+ defer _ = libc.closedir(dir);
+ while (libc.readdir(dir)) |d| {
+ const name = std.mem.sliceTo(@as([*:0]const u8, @ptrCast(&d.name)), 0);
+ if (std.mem.endsWith(u8, name, ".snap"))
+ try scripts.append(arena, try std.fmt.allocPrint(arena, "{s}/{s}", .{ dir_path, name }));
}
}
fn readFileAlloc(arena: std.mem.Allocator, path: []const u8) ![]u8 {
const path_z = try arena.dupeZ(u8, path);
- const rc = linux.open(path_z, .{ .ACCMODE = .RDONLY }, 0);
- const sfd: isize = @bitCast(rc);
- if (sfd < 0) return error.OpenFailed;
- const fd: i32 = @intCast(sfd);
- defer _ = linux.close(fd);
+ const fd = libc.open(path_z, .{ .ACCMODE = .RDONLY });
+ if (fd < 0) return error.OpenFailed;
+ defer _ = libc.close(fd);
var buf: std.ArrayList(u8) = .empty;
var chunk: [16384]u8 = undefined;
while (true) {
- const r = linux.read(fd, &chunk, chunk.len);
- const n: isize = @bitCast(r);
+ const n = libc.read(fd, &chunk, chunk.len);
if (n < 0) {
- if (n == -@as(isize, @intFromEnum(linux.E.INTR))) continue;
+ if (libc.errno(n) == .INTR) continue;
return error.ReadFailed;
}
if (n == 0) break;
@@ -506,15 +489,15 @@ fn readFileAlloc(arena: std.mem.Allocator, path: []const u8) ![]u8 {
fn mkdir(arena: std.mem.Allocator, path: []const u8, exist_ok: bool) !void {
const path_z = try arena.dupeZ(u8, path);
- const n: isize = @bitCast(linux.mkdir(path_z, 0o755));
- if (n < 0) {
- if (exist_ok and n == -@as(isize, @intFromEnum(linux.E.EXIST))) return;
+ const rc = libc.mkdir(path_z, 0o755);
+ if (rc != 0) {
+ if (exist_ok and libc.errno(rc) == .EXIST) return;
return error.MkdirFailed;
}
}
-fn chdirRc(path_z: [:0]const u8) isize {
- return @bitCast(linux.chdir(path_z.ptr));
+fn chdirRc(path_z: [:0]const u8) c_int {
+ return libc.chdir(path_z.ptr);
}
fn rmrf(path: []const u8) void {
@@ -522,15 +505,15 @@ fn rmrf(path: []const u8) void {
if (path.len >= path_buf.len) return;
@memcpy(path_buf[0..path.len], path);
path_buf[path.len] = 0;
- const pid: isize = @bitCast(linux.fork());
+ const pid = libc.fork();
if (pid == 0) {
const argv: [4:null]?[*:0]const u8 = .{ "rm", "-rf", @as([*:0]const u8, @ptrCast(&path_buf)), null };
_ = execvp("rm", &argv);
- linux.exit_group(127);
+ libc._exit(127);
}
if (pid < 0) return;
- var status: u32 = 0;
- _ = linux.wait4(@intCast(pid), &status, 0, null);
+ var status: c_int = 0;
+ _ = libc.waitpid(pid, &status, 0);
}
fn printFirstDiff(golden: []const u8, actual: []const u8) void {
diff --git a/test/snapshots/boot.golden b/test/snapshots/boot.golden
index 85bac8dd..e17d9f3d 100644
--- a/test/snapshots/boot.golden
+++ b/test/snapshots/boot.golden
@@ -1,6 +1,6 @@
== snap boot grid=100x30 cursor=4,4
|Kill Newcol Tutor Debug Colors NextColor Dump
-| nm /tmp/pardes-snap/boot/cwd Del nm /tmp/pardes-snap/boot/cwd Del
+| NOR /tmp/pardes-snap/boot/cwd Del NOR /tmp/pardes-snap/boot/cwd Del
|
| hello.txt hello.txt
|
@@ -15,7 +15,7 @@
|
|
|
-| nm /tmp/pardes-snap/boot/cwd Del
+| NOR /tmp/pardes-snap/boot/cwd Del
|
| hello.txt
|
@@ -31,7 +31,7 @@
|
== style boot
|0: 0-44 #969696,#2c2a3e, 45-99 d,#2c2a3e,
-|1: 0-1 d,#6e4fd0, 2-33 #969696,#2c2a3e, 34-49 d,#2c2a3e, 50-51 d,#383c54, 52-83 #969696,#2c2a3e, 84-99 d,#2c2a3e,
+|1: 0-1 d,#6e4fd0, 2-34 #969696,#2c2a3e, 35-49 d,#2c2a3e, 50-51 d,#383c54, 52-84 #969696,#2c2a3e, 85-99 d,#2c2a3e,
|2: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
|3: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
|4: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
@@ -46,7 +46,7 @@
|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,#383c54, 2-33 #969696,#2c2a3e, 34-49 d,#2c2a3e, 50-51 d,#525252, 52-99 d,d,
+|16: 0-1 d,#383c54, 2-34 #969696,#2c2a3e, 35-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,
diff --git a/test/snapshots/cursorline.golden b/test/snapshots/cursorline.golden
new file mode 100644
index 00000000..2902e41f
--- /dev/null
+++ b/test/snapshots/cursorline.golden
@@ -0,0 +1,124 @@
+== snap top grid=100x30 cursor=7,2
+|Kill Newcol Tutor Debug Colors NextColor Dump
+| NOR /tmp/pardes-snap/cursorline/cwd/cur.txt Save NOR /tmp/pardes-snap/cursorline/cwd Del
+| 1 line 1
+| 2 line 2 cur.txt
+| 3 line 3
+| 4 line 4
+| 5 line 5
+|╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌
+| NOR /tmp/pardes-snap/cursorline/cwd Del
+|
+| cur.txt
+|
+|
+|
+| cur.txt
+|
+| NOR /tmp/pardes-snap/cursorline/cwd Del
+|
+| cur.txt
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+== style top
+|0: 0-44 #969696,#2c2a3e, 45-99 d,#2c2a3e,
+|1: 0-1 d,#6e4fd0, 2-49 #969696,#2c2a3e, 50-51 d,#383c54, 52-90 #969696,#2c2a3e, 91-99 d,#2c2a3e,
+|2: 0-1 d,#525252, 2-6 #969696,#2c2a3e, 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,
+|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,#2a2a2a, 2-6 #5a5a5a,d, 7-49 d,d, 50-51 d,#525252, 52-99 d,d,
+|8: 0-1 d,#383c54, 2-40 #969696,#2c2a3e, 41-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,#383c54, 2-40 #969696,#2c2a3e, 41-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,#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,
+|25: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
+|26: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
+|27: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
+|28: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
+|29: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
+== snap down3 grid=100x30 cursor=7,5
+|Kill Newcol Tutor Debug Colors NextColor Dump
+| NOR /tmp/pardes-snap/cursorline/cwd/cur.txt Save NOR /tmp/pardes-snap/cursorline/cwd Del
+| 1 line 1
+| 2 line 2 cur.txt
+| 3 line 3
+| 4 line 4
+| 5 line 5
+|╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌
+| NOR /tmp/pardes-snap/cursorline/cwd Del
+|
+| cur.txt
+|
+|
+|
+| cur.txt
+|
+| NOR /tmp/pardes-snap/cursorline/cwd Del
+|
+| cur.txt
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+== style down3
+|0: 0-44 #969696,#2c2a3e, 45-99 d,#2c2a3e,
+|1: 0-1 d,#6e4fd0, 2-49 #969696,#2c2a3e, 50-51 d,#383c54, 52-90 #969696,#2c2a3e, 91-99 d,#2c2a3e,
+|2: 0-1 d,#525252, 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 #969696,#2c2a3e, 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,#2a2a2a, 2-6 #5a5a5a,d, 7-49 d,d, 50-51 d,#525252, 52-99 d,d,
+|8: 0-1 d,#383c54, 2-40 #969696,#2c2a3e, 41-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,#383c54, 2-40 #969696,#2c2a3e, 41-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,#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,
+|25: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
+|26: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
+|27: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
+|28: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
+|29: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
diff --git a/test/snapshots/cursorline.snap b/test/snapshots/cursorline.snap
new file mode 100644
index 00000000..f9b3de5b
--- /dev/null
+++ b/test/snapshots/cursorline.snap
@@ -0,0 +1,25 @@
+# cursor-line gutter: the line number on the cursor's row takes the tag style
+# and follows modal movement (gg to the top, then jjj down three lines)
+lines cur.txt 20
+start 30 100
+wait 8000 cur.txt
+stable 700 20000
+press left 5 8
+release left 5 8
+stable 400 5000
+key i
+text cur.txt
+key esc
+settle 700
+stable 400 5000
+press right 6 8
+release right 6 8
+stable 700 15000
+key g g
+stable 400 5000
+snap top
+snapstyle top
+key j j j
+stable 400 5000
+snap down3
+snapstyle down3
diff --git a/test/snapshots/dump.actual b/test/snapshots/dump.actual
deleted file mode 100644
index cf39f324..00000000
--- a/test/snapshots/dump.actual
+++ /dev/null
@@ -1,63 +0,0 @@
-== file dump (3004 bytes)
-.{
- .magic = "pardes-dump",
- .version = 1,
- .screen = .{ .cols = 100, .rows = 30 },
- .active = 0,
- .topbar = "Kill Newcol Tutor Debug Colors NextColor Dump",
- .theme = "dark",
- .columns = .{ .{ .weight = 1, .panes = .{ 0, 1 } }, .{ .weight = 1, .panes = .{2} } },
- .panes = .{
- .{
- .kind = .terminal,
- .tag = "nm /tmp/pardes-snap/dump/cwd Del",
- .body = "\nd.txt\n\n\n\n typed-marker\n\n\n\n\n\n\n\n",
- .scroll = 0,
- .cols = 48,
- .rows = 14,
- .vweight = 1,
- .terminal = .{
- .cwd = "/tmp/pardes-snap/dump/cwd",
- .stream = "\nd.txt\n",
- .stream_b64 = "G10xMzM7QwcbXTEzMztEBxtdMTMzO0MHG10wO2dvYmxpbkBwYXJkZXM6L3RtcC9wYXJkZXMtc25hcC9kdW1wL2N3ZAcbWz8yMDA0aBtdMTMzO0E7Y2w9bGluZQckIBtdMTMzO0IHDRtbSw0bXTEzMztBO2NsPWxpbmUHJCAbXTEzMztCB2xzDQobWz8yMDA0bA0bXTEzMztDB2QudHh0DQobXTEzMztDBxtdMTMzO0QHG10xMzM7QwcbXTA7Z29ibGluQHBhcmRlczovdG1wL3BhcmRlcy1zbmFwL2R1bXAvY3dkBxtbPzIwMDRoG10xMzM7QTtjbD1saW5lByQgG10xMzM7Qgc=",
- .cursor = .{ .col = 2, .row = 2 },
- },
- .file = null,
- .image = null,
- },
- .{
- .kind = .terminal,
- .tag = "nm /tmp/pardes-snap/dump/cwd Del",
- .body = "\nd.txt\n\n\n\n\n\n\n\n\n\n\n",
- .scroll = 0,
- .cols = 48,
- .rows = 13,
- .vweight = 1,
- .terminal = .{
- .cwd = "/tmp/pardes-snap/dump/cwd",
- .stream = "\nd.txt\n",
- .stream_b64 = "G10xMzM7QwcbXTEzMztEBxtdMTMzO0MHG10wO2dvYmxpbkBwYXJkZXM6L3RtcC9wYXJkZXMtc25hcC9kdW1wL2N3ZAcbWz8yMDA0aBtdMTMzO0E7Y2w9bGluZQckIBtdMTMzO0IHDRtbSw0bXTEzMztBO2NsPWxpbmUHJCAbXTEzMztCB2xzDQobWz8yMDA0bA0bXTEzMztDB2QudHh0DQobXTEzMztDBxtdMTMzO0QHG10xMzM7QwcbXTA7Z29ibGluQHBhcmRlczovdG1wL3BhcmRlcy1zbmFwL2R1bXAvY3dkBxtbPzIwMDRoG10xMzM7QTtjbD1saW5lByQgG10xMzM7Qgc=",
- .cursor = .{ .col = 2, .row = 2 },
- },
- .file = null,
- .image = null,
- },
- .{
- .kind = .terminal,
- .tag = "nm /tmp/pardes-snap/dump/cwd Del",
- .body = "\nd.txt\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n",
- .scroll = 0,
- .cols = 48,
- .rows = 28,
- .vweight = 1,
- .terminal = .{
- .cwd = "/tmp/pardes-snap/dump/cwd",
- .stream = "\nd.txt\n",
- .stream_b64 = "G10xMzM7QwcbXTEzMztEBxtdMTMzO0MHG10wO2dvYmxpbkBwYXJkZXM6L3RtcC9wYXJkZXMtc25hcC9kdW1wL2N3ZAcbWz8yMDA0aBtdMTMzO0E7Y2w9bGluZQckIBtdMTMzO0IHDRtbSw0bXTEzMztBO2NsPWxpbmUHJCAbXTEzMztCB2xzDQobWz8yMDA0bA0bXTEzMztDB2QudHh0DQobXTEzMztDBxtdMTMzO0QHG10xMzM7QwcbXTA7Z29ibGluQHBhcmRlczovdG1wL3BhcmRlcy1zbmFwL2R1bXAvY3dkBxtbPzIwMDRoG10xMzM7QTtjbD1saW5lByQgG10xMzM7Qgc=",
- .cursor = .{ .col = 2, .row = 2 },
- },
- .file = null,
- .image = null,
- },
- },
-}== end file
diff --git a/test/snapshots/dump.golden b/test/snapshots/dump.golden
index c18003d5..9527f838 100644
--- a/test/snapshots/dump.golden
+++ b/test/snapshots/dump.golden
@@ -10,7 +10,7 @@
.panes = .{
.{
.kind = .terminal,
- .tag = "nm /tmp/pardes-snap/dump/cwd Del",
+ .tag = "NOR /tmp/pardes-snap/dump/cwd Del",
.body = "\nd.txt\n\n\n\n typed-marker\n\n\n\n\n\n\n\n",
.scroll = 0,
.cols = 48,
@@ -27,7 +27,7 @@
},
.{
.kind = .terminal,
- .tag = "nm /tmp/pardes-snap/dump/cwd Del",
+ .tag = "NOR /tmp/pardes-snap/dump/cwd Del",
.body = "\nd.txt\n\n\n\n\n\n\n\n\n\n\n",
.scroll = 0,
.cols = 48,
@@ -44,7 +44,7 @@
},
.{
.kind = .terminal,
- .tag = "nm /tmp/pardes-snap/dump/cwd Del",
+ .tag = "NOR /tmp/pardes-snap/dump/cwd Del",
.body = "\nd.txt\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n",
.scroll = 0,
.cols = 48,
diff --git a/test/snapshots/edit.actual b/test/snapshots/edit.actual
deleted file mode 100644
index e45687a2..00000000
--- a/test/snapshots/edit.actual
+++ /dev/null
@@ -1,62 +0,0 @@
-== snap inserted grid=100x30 cursor=4,4
-|Kill Newcol Tutor Debug Colors NextColor Dump
-| nm /tmp/pardes-snap/edit/cwd Del nm /tmp/pardes-snap/edit/cwd Del
-|
-| e.txt e.txt
-|
-|
-|
-|
-|
-|
-|
-|
-|
-|
-|
-|
-| nm /tmp/pardes-snap/edit/cwd Del
-|
-| e.txt
-|
-|
-|
-|
-|
-|
-|
-|
-|
-|
-|
-== style inserted
-|0: 0-44 #969696,#2c2a3e, 45-99 d,#2c2a3e,
-|1: 0-1 d,#6e4fd0, 2-33 #969696,#2c2a3e, 34-49 d,#2c2a3e, 50-51 d,#383c54, 52-83 #969696,#2c2a3e, 84-99 d,#2c2a3e,
-|2: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
-|3: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
-|4: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
-|5: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
-|6: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
-|7: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
-|8: 0-1 d,#525252, 2-49 d,d, 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,#383c54, 2-33 #969696,#2c2a3e, 34-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,#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,
-|25: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
-|26: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
-|27: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
-|28: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
-|29: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
diff --git a/test/snapshots/edit.golden b/test/snapshots/edit.golden
index 846bfa30..1e253388 100644
--- a/test/snapshots/edit.golden
+++ b/test/snapshots/edit.golden
@@ -1,6 +1,6 @@
== snap inserted grid=100x30 cursor=4,9
|Kill Newcol Tutor Debug Colors NextColor Dump
-| nm /tmp/pardes-snap/edit/cwd Del nm /tmp/pardes-snap/edit/cwd Del
+| NOR /tmp/pardes-snap/edit/cwd Del NOR /tmp/pardes-snap/edit/cwd Del
|
| e.txt e.txt
|
@@ -15,7 +15,7 @@
|
|
|
-| nm /tmp/pardes-snap/edit/cwd Del
+| NOR /tmp/pardes-snap/edit/cwd Del
|
| e.txt
|
@@ -31,7 +31,7 @@
|
== style inserted
|0: 0-44 #969696,#2c2a3e, 45-99 d,#2c2a3e,
-|1: 0-1 d,#6e4fd0, 2-33 #969696,#2c2a3e, 34-49 d,#2c2a3e, 50-51 d,#383c54, 52-83 #969696,#2c2a3e, 84-99 d,#2c2a3e,
+|1: 0-1 d,#6e4fd0, 2-34 #969696,#2c2a3e, 35-49 d,#2c2a3e, 50-51 d,#383c54, 52-84 #969696,#2c2a3e, 85-99 d,#2c2a3e,
|2: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
|3: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
|4: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
@@ -46,7 +46,7 @@
|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,#383c54, 2-33 #969696,#2c2a3e, 34-49 d,#2c2a3e, 50-51 d,#525252, 52-99 d,d,
+|16: 0-1 d,#383c54, 2-34 #969696,#2c2a3e, 35-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,
diff --git a/test/snapshots/exec-bigdrag.golden b/test/snapshots/exec-bigdrag.golden
new file mode 100644
index 00000000..1d5df56b
--- /dev/null
+++ b/test/snapshots/exec-bigdrag.golden
@@ -0,0 +1,61 @@
+== snap alive grid=200x60 cursor=104,37
+|Kill Newcol Tutor Debug Colors NextColor Dump
+| NOR /tmp/pardes-snap/exec-bigdrag/cwd Del NOR /tmp/pardes-snap/exec-bigdrag/cwd Del
+| bash: line: command not found
+| big.txt
+| bash: 4line: command not found
+|
+| bash: 15line: command not found
+|
+| bash: 726line: command not found
+|
+| bash: 2737line: command not found
+|
+| bash: 2748line: command not found
+|
+| bash: e: command not found
+|
+| bash: ne: command not found
+|
+| bash: ine: command not found
+|
+| bash: line: command not found
+|
+| bash: 2line: command not found
+|
+| bash: 13line: command not found
+|
+| bash: 824line: command not found
+|
+| bash: 2835line: command not found
+|
+| bash: 2846line: command not found
+| NOR /tmp/pardes-snap/exec-bigdrag/cwd Del
+| bash: e: command not found
+| big.txt
+| bash: ne: command not found
+|
+| bash: ine: command not found
+| echo alive-o''k
+| bash: line: command not found
+|
+| bash: 0line: command not found
+|
+| bash: 11line: command not found
+|
+| bash: 922line: command not found
+|
+| bash: 2933line: command not found
+|
+| bash: 2944line: command not found
+|
+| bash: e: command not found
+|
+| bash: ne: command not found
+|
+| bash: ine: command not found
+|
+| bash: line: command not found
+|
+| alive-ok
+|
diff --git a/test/snapshots/exec-bigdrag.snap b/test/snapshots/exec-bigdrag.snap
new file mode 100644
index 00000000..dae92205
--- /dev/null
+++ b/test/snapshots/exec-bigdrag.snap
@@ -0,0 +1,40 @@
+# a giant accidental middle-drag: the whole selection is executed, chunked
+# into 64-byte write effects in ONE update — this used to burst the fixed
+# 64-slot effect ring and panic the core (assert in emit). Needs a big grid:
+# the selection must exceed 64*64 bytes, more than any 30x100 pane can hold.
+lines big.txt 3000
+start 60 200
+wait 8000 big.txt
+stable 500 20000
+press left 105 8
+release left 105 8
+stable 300 5000
+key i
+text tr -d '\n' < big.txt
+key esc
+settle 400
+press middle 105 8
+drag middle 126 8
+release middle 126 8
+stable 800 30000
+# the accidental sweep over the full-height right pane, then release
+press middle 105 4
+drag middle 150 30
+drag middle 198 58
+release middle 198 58
+settle 500
+stable 800 30000
+# still alive: type and execute a marker command
+press left 105 40
+release left 105 40
+stable 300 5000
+key i
+text echo alive-o''k
+key esc
+settle 300
+press middle 105 40
+drag middle 119 40
+release middle 119 40
+wait 10000 alive-ok
+stable 800 20000
+snap alive
diff --git a/test/snapshots/exec.golden b/test/snapshots/exec.golden
index 23b1305b..01464fd9 100644
--- a/test/snapshots/exec.golden
+++ b/test/snapshots/exec.golden
@@ -1,6 +1,6 @@
== snap exec grid=100x30 cursor=4,7
|Kill Newcol Tutor Debug Colors NextColor Dump
-| nm /tmp/pardes-snap/exec/cwd Del nm /tmp/pardes-snap/exec/cwd Del
+| NOR /tmp/pardes-snap/exec/cwd Del NOR /tmp/pardes-snap/exec/cwd Del
|
| e.txt e.txt
|
@@ -15,7 +15,7 @@
|
|
|
-| nm /tmp/pardes-snap/exec/cwd Del
+| NOR /tmp/pardes-snap/exec/cwd Del
|
| e.txt
|
@@ -31,7 +31,7 @@
|
== snap kept grid=100x30 cursor=6,2
|Kill Newcol Tutor Debug Colors NextColor Dump
-| nm /tmp/pardes-snap/exec/cwd Del nm /tmp/pardes-snap/exec/cwd Del
+| NOR /tmp/pardes-snap/exec/cwd Del NOR /tmp/pardes-snap/exec/cwd Del
| ZZARG
| ./c.sh e.txt
|
@@ -46,7 +46,7 @@
|
|
|
-| nm /tmp/pardes-snap/exec/cwd Del
+| NOR /tmp/pardes-snap/exec/cwd Del
|
| e.txt
|
@@ -62,7 +62,7 @@
|
== snap chord grid=100x30 cursor=6,2
|Kill Newcol Tutor Debug Colors NextColor Dump
-| nm /tmp/pardes-snap/exec/cwd Del nm /tmp/pardes-snap/exec/cwd Del
+| NOR /tmp/pardes-snap/exec/cwd Del NOR /tmp/pardes-snap/exec/cwd Del
| ZZARG
| ./c.sh e.txt
|
@@ -77,7 +77,7 @@
|
|
|
-| nm /tmp/pardes-snap/exec/cwd Del
+| NOR /tmp/pardes-snap/exec/cwd Del
|
| e.txt
|
@@ -93,7 +93,7 @@
|
== snap deleted grid=100x30 cursor=4,4
|Kill Newcol Tutor Debug Colors NextColor Dump
-| nm /tmp/pardes-snap/exec/cwd Del nm /tmp/pardes-snap/exec/cwd Del
+| NOR /tmp/pardes-snap/exec/cwd Del NOR /tmp/pardes-snap/exec/cwd Del
|
| e.txt e.txt
|
diff --git a/test/snapshots/exec.snap b/test/snapshots/exec.snap
index dd8c24ee..a588d9f3 100644
--- a/test/snapshots/exec.snap
+++ b/test/snapshots/exec.snap
@@ -40,7 +40,7 @@ wait 10000 CHORDARG:ZZARG
stable 700 10000
snap chord
# middle-click Del in this pane's tag (after cwd prefix) closes it
-press middle 32 2
-release middle 32 2
+press middle 33 2
+release middle 33 2
stable 700 10000
snap deleted
diff --git a/test/snapshots/fileedit.golden b/test/snapshots/fileedit.golden
index c6fb40aa..72950b96 100644
--- a/test/snapshots/fileedit.golden
+++ b/test/snapshots/fileedit.golden
@@ -1,16 +1,13 @@
== snap edited grid=100x30 cursor=17,2
|Kill Newcol Tutor Debug Colors NextColor Dump
-| nm /tmp/pardes-snap/fileedit/cwd/f.txt Save Del nm /tmp/pardes-snap/fileedit/cwd Del
+| NOR /tmp/pardes-snap/fileedit/cwd/f.txt Save Del NOR /tmp/pardes-snap/fileedit/cwd Del
| 1 liEDIT''MEne 1
| 2 line 2 f.txt
| 3 line 3
| 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
+| NOR /tmp/pardes-snap/fileedit/cwd Del
|
| f.txt
|
@@ -18,11 +15,14 @@
|
| f.txt
|
+| NOR /tmp/pardes-snap/fileedit/cwd Del
+|
+| f.txt
+|
+|
|
|
-| nm /tmp/pardes-snap/fileedit/cwd Del
|
-| f.txt
|
|
|
@@ -31,17 +31,14 @@
|
== 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
+| NOR /tmp/pardes-snap/fileedit/cwd/f.txt Save Del NOR /tmp/pardes-snap/fileedit/cwd Del
| 1 liEDIT''MEne 1
| 2 line 3 f.txt
| 3 line 4
| 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
+| NOR /tmp/pardes-snap/fileedit/cwd Del
|
| f.txt
|
@@ -49,11 +46,14 @@
|
| f.txt
|
+| NOR /tmp/pardes-snap/fileedit/cwd Del
+|
+| f.txt
+|
+|
|
|
-| nm /tmp/pardes-snap/fileedit/cwd Del
|
-| f.txt
|
|
|
@@ -62,17 +62,14 @@
|
== 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
+| NOR /tmp/pardes-snap/fileedit/cwd/f.txt Save Del NOR /tmp/pardes-snap/fileedit/cwd Del
| 1 liEDIT''MEne 1
| 2 line 2 f.txt
| 3 line 3
| 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
+| NOR /tmp/pardes-snap/fileedit/cwd Del
|
| f.txt
|
@@ -80,11 +77,14 @@
|
| f.txt
|
+| NOR /tmp/pardes-snap/fileedit/cwd Del
+|
+| f.txt
+|
+|
|
|
-| nm /tmp/pardes-snap/fileedit/cwd Del
|
-| f.txt
|
|
|
diff --git a/test/snapshots/fileedit.snap b/test/snapshots/fileedit.snap
index 7bafa358..bd259c8b 100644
--- a/test/snapshots/fileedit.snap
+++ b/test/snapshots/fileedit.snap
@@ -33,8 +33,8 @@ snap deleted
key u
stable 400 5000
snap undone
-# Save via the tag: middle-click the Save word (after "nm <path> ")
-press middle 42 2
-release middle 42 2
+# Save via the tag: middle-click the Save word (after "NOR <path> ")
+press middle 43 2
+release middle 43 2
settle 800
snapfile saved /tmp/pardes-snap/fileedit/cwd/f.txt
diff --git a/test/snapshots/fsearch.golden b/test/snapshots/fsearch.golden
new file mode 100644
index 00000000..9b287277
--- /dev/null
+++ b/test/snapshots/fsearch.golden
@@ -0,0 +1,310 @@
+== snap opened grid=120x30 cursor=7,2
+|Kill Newcol Tutor Debug Colors NextColor Dump
+| NOR /tmp/pardes-snap/fsearch/cwd/g.txt Save Del NOR /tmp/pardes-snap/fsearch/cwd Del
+| 1 l1
+| 2 MARK a g.txt
+| 3 l3
+| 4 l4
+| 5 l5
+|╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌
+| NOR /tmp/pardes-snap/fsearch/cwd Del
+|
+| g.txt
+|
+|
+|
+| g.txt
+|
+| NOR /tmp/pardes-snap/fsearch/cwd Del
+|
+| g.txt
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+== snap typing grid=120x30 cursor=55,1
+|Kill Newcol Tutor Debug Colors NextColor Dump
+| INS /tmp/pardes-snap/fsearch/cwd/g.txt Save Del /MARK NOR /tmp/pardes-snap/fsearch/cwd Del
+| 1 l1
+| 2 MARK a g.txt
+| 3 l3
+| 4 l4
+| 5 l5
+|╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌
+| NOR /tmp/pardes-snap/fsearch/cwd Del
+|
+| g.txt
+|
+|
+|
+| g.txt
+|
+| NOR /tmp/pardes-snap/fsearch/cwd Del
+|
+| g.txt
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+== snap results grid=120x30 cursor=7,2
+|Kill Newcol Tutor Debug Colors NextColor Dump
+| NOR /tmp/pardes-snap/fsearch/cwd/g.txt Save Del NOR /tmp/pardes-snap/fsearch/cwd Del
+| 1 l1
+| 2 MARK a g.txt
+| 3 l3
+| 4 l4
+| 5 l5
+|╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌
+| NOR /tmp/pardes-snap/fsearch/cwd Del
+|
+|
+| g.txt
+| /tmp/pardes-snap/fsearch/cwd/g.txt:2:MARK a
+| /tmp/pardes-snap/fsearch/cwd/g.txt:6:MARK b
+| /tmp/pardes-snap/fsearch/cwd/g.txt:10:MARK c
+|
+| NOR /tmp/pardes-snap/fsearch/cwd Del
+|
+| g.txt
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+== snap first grid=120x30 cursor=7,3
+|Kill Newcol Tutor Debug Colors NextColor Dump
+| NOR /tmp/pardes-snap/fsearch/cwd/g.txt Save Del NOR /tmp/pardes-snap/fsearch/cwd Del
+| 1 l1
+| 2 MARK a g.txt
+| 3 l3
+| 4 l4
+| 5 l5
+|╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌
+| NOR /tmp/pardes-snap/fsearch/cwd Del
+|
+|
+| g.txt
+| /tmp/pardes-snap/fsearch/cwd/g.txt:2:MARK a
+| /tmp/pardes-snap/fsearch/cwd/g.txt:6:MARK b
+| /tmp/pardes-snap/fsearch/cwd/g.txt:10:MARK c
+|
+| NOR /tmp/pardes-snap/fsearch/cwd Del
+|
+| g.txt
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+== style first
+|0: 0-44 #969696,#2c2a3e, 45-119 d,#2c2a3e,
+|1: 0-1 d,#6e4fd0, 2-48 #969696,#2c2a3e, 49-59 d,#2c2a3e, 60-61 d,#383c54, 62-97 #969696,#2c2a3e, 98-119 d,#2c2a3e,
+|2: 0-1 d,#525252, 2-6 #5a5a5a,d, 7-59 d,d, 60-61 d,#525252, 62-119 d,d,
+|3: 0-1 d,#525252, 2-6 #969696,#2c2a3e, 7-59 d,d, 60-61 d,#525252, 62-119 d,d,
+|4: 0-1 d,#525252, 2-6 #5a5a5a,d, 7-59 d,d, 60-61 d,#525252, 62-119 d,d,
+|5: 0-1 d,#2a2a2a, 2-6 #5a5a5a,d, 7-59 d,d, 60-61 d,#525252, 62-119 d,d,
+|6: 0-1 d,#2a2a2a, 2-6 #5a5a5a,d, 7-59 d,d, 60-61 d,#525252, 62-119 d,d,
+|7: 0-1 d,#2a2a2a, 2-6 #5a5a5a,d, 7-59 d,d, 60-61 d,#525252, 62-119 d,d,
+|8: 0-1 d,#383c54, 2-37 #969696,#2c2a3e, 38-59 d,#2c2a3e, 60-61 d,#525252, 62-119 d,d,
+|9: 0-1 d,#2a2a2a, 2-59 d,d, 60-61 d,#525252, 62-119 d,d,
+|10: 0-1 d,#2a2a2a, 2-59 d,d, 60-61 d,#525252, 62-119 d,d,
+|11: 0-1 d,#525252, 2-59 d,d, 60-61 d,#525252, 62-119 d,d,
+|12: 0-1 d,#525252, 2-59 #d8c8a8,#4a3a1e, 60-61 d,#525252, 62-119 d,d,
+|13: 0-1 d,#525252, 2-59 d,d, 60-61 d,#525252, 62-119 d,d,
+|14: 0-1 d,#525252, 2-59 d,d, 60-61 d,#525252, 62-119 d,d,
+|15: 0-1 d,#2a2a2a, 2-59 d,d, 60-61 d,#525252, 62-119 d,d,
+|16: 0-1 d,#383c54, 2-37 #969696,#2c2a3e, 38-59 d,#2c2a3e, 60-61 d,#525252, 62-119 d,d,
+|17: 0-1 d,#525252, 2-59 d,d, 60-61 d,#525252, 62-119 d,d,
+|18: 0-1 d,#525252, 2-59 d,d, 60-61 d,#525252, 62-119 d,d,
+|19: 0-1 d,#525252, 2-59 d,d, 60-61 d,#525252, 62-119 d,d,
+|20: 0-1 d,#525252, 2-59 d,d, 60-61 d,#525252, 62-119 d,d,
+|21: 0-1 d,#525252, 2-59 d,d, 60-61 d,#525252, 62-119 d,d,
+|22: 0-1 d,#525252, 2-59 d,d, 60-61 d,#525252, 62-119 d,d,
+|23: 0-1 d,#525252, 2-59 d,d, 60-61 d,#525252, 62-119 d,d,
+|24: 0-1 d,#525252, 2-59 d,d, 60-61 d,#525252, 62-119 d,d,
+|25: 0-1 d,#525252, 2-59 d,d, 60-61 d,#525252, 62-119 d,d,
+|26: 0-1 d,#525252, 2-59 d,d, 60-61 d,#525252, 62-119 d,d,
+|27: 0-1 d,#525252, 2-59 d,d, 60-61 d,#525252, 62-119 d,d,
+|28: 0-1 d,#525252, 2-59 d,d, 60-61 d,#525252, 62-119 d,d,
+|29: 0-1 d,#525252, 2-59 d,d, 60-61 d,#525252, 62-119 d,d,
+== snap second grid=120x30 cursor=7,5
+|Kill Newcol Tutor Debug Colors NextColor Dump
+| NOR /tmp/pardes-snap/fsearch/cwd/g.txt Save Del NOR /tmp/pardes-snap/fsearch/cwd Del
+| 3 l3
+| 4 l4 g.txt
+| 5 l5
+| 6 MARK b
+| 7 l7
+|╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌
+| NOR /tmp/pardes-snap/fsearch/cwd Del
+|
+|
+| g.txt
+| /tmp/pardes-snap/fsearch/cwd/g.txt:2:MARK a
+| /tmp/pardes-snap/fsearch/cwd/g.txt:6:MARK b
+| /tmp/pardes-snap/fsearch/cwd/g.txt:10:MARK c
+|
+| NOR /tmp/pardes-snap/fsearch/cwd Del
+|
+| g.txt
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+== snap third grid=120x30 cursor=7,5
+|Kill Newcol Tutor Debug Colors NextColor Dump
+| NOR /tmp/pardes-snap/fsearch/cwd/g.txt Save Del NOR /tmp/pardes-snap/fsearch/cwd Del
+| 7 l7
+| 8 l8 g.txt
+| 9 l9
+| 10 MARK c
+| 11 l11
+|╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌
+| NOR /tmp/pardes-snap/fsearch/cwd Del
+|
+|
+| g.txt
+| /tmp/pardes-snap/fsearch/cwd/g.txt:2:MARK a
+| /tmp/pardes-snap/fsearch/cwd/g.txt:6:MARK b
+| /tmp/pardes-snap/fsearch/cwd/g.txt:10:MARK c
+|
+| NOR /tmp/pardes-snap/fsearch/cwd Del
+|
+| g.txt
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+== snap back grid=120x30 cursor=7,5
+|Kill Newcol Tutor Debug Colors NextColor Dump
+| NOR /tmp/pardes-snap/fsearch/cwd/g.txt Save Del NOR /tmp/pardes-snap/fsearch/cwd Del
+| 3 l3
+| 4 l4 g.txt
+| 5 l5
+| 6 MARK b
+| 7 l7
+|╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌
+| NOR /tmp/pardes-snap/fsearch/cwd Del
+|
+|
+| g.txt
+| /tmp/pardes-snap/fsearch/cwd/g.txt:2:MARK a
+| /tmp/pardes-snap/fsearch/cwd/g.txt:6:MARK b
+| /tmp/pardes-snap/fsearch/cwd/g.txt:10:MARK c
+|
+| NOR /tmp/pardes-snap/fsearch/cwd Del
+|
+| g.txt
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+== snap cancel grid=120x30 cursor=7,5
+|Kill Newcol Tutor Debug Colors NextColor Dump
+| NOR /tmp/pardes-snap/fsearch/cwd/g.txt Save Del NOR /tmp/pardes-snap/fsearch/cwd Del
+| 3 l3
+| 4 l4 g.txt
+| 5 l5
+| 6 MARK b
+| 7 l7
+|╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌
+| NOR /tmp/pardes-snap/fsearch/cwd Del
+|
+|
+| g.txt
+| /tmp/pardes-snap/fsearch/cwd/g.txt:2:MARK a
+| /tmp/pardes-snap/fsearch/cwd/g.txt:6:MARK b
+| /tmp/pardes-snap/fsearch/cwd/g.txt:10:MARK c
+|
+| NOR /tmp/pardes-snap/fsearch/cwd Del
+|
+| g.txt
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+== snap nomatch grid=120x30 cursor=7,5
+|Kill Newcol Tutor Debug Colors NextColor Dump
+| NOR /tmp/pardes-snap/fsearch/cwd/g.txt Save Del NOR /tmp/pardes-snap/fsearch/cwd Del
+| 3 l3
+| 4 l4 g.txt
+| 5 l5
+| 6 MARK b
+| 7 l7
+|╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌
+| NOR /tmp/pardes-snap/fsearch/cwd Del
+|
+| g.txt
+| /tmp/pardes-snap/fsearch/cwd/g.txt:2:MARK a
+| /tmp/pardes-snap/fsearch/cwd/g.txt:6:MARK b
+| /tmp/pardes-snap/fsearch/cwd/g.txt:10:MARK c
+|
+|
+| NOR /tmp/pardes-snap/fsearch/cwd Del
+|
+| g.txt
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
diff --git a/test/snapshots/fsearch.snap b/test/snapshots/fsearch.snap
new file mode 100644
index 00000000..eab702cb
--- /dev/null
+++ b/test/snapshots/fsearch.snap
@@ -0,0 +1,63 @@
+# `/` file search: the pattern types into the tag (persistent, no popup);
+# Enter runs grep -nH into a shell pane so the results are ordinary terminal
+# text; n/N select the next/prev result row there (prompt rows skipped via the
+# OSC 133 semantic marks) and look it — the file pane scrolls to path:NNN.
+# Esc abandons the input; a no-match search leaves n with nowhere to go.
+file g.txt l1\nMARK a\nl3\nl4\nl5\nMARK b\nl7\nl8\nl9\nMARK c\nl11\nl12
+start 30 120
+wait 8000 g.txt
+stable 700 20000
+# open g.txt: type the name in the shell, look it (as in look-file.snap)
+press left 5 8
+release left 5 8
+stable 400 5000
+key i
+text g.txt
+key esc
+settle 700
+stable 400 5000
+press right 6 8
+release right 6 8
+wait 10000 MARK a
+stable 700 15000
+snap opened
+# / starts the search input in the tag; the pattern is visible while typing
+key /
+stable 400 5000
+text MARK
+stable 400 5000
+snap typing
+key enter
+wait 10000 g.txt:2:MARK
+stable 700 10000
+snap results
+# n selects result 1 in the results pane + scrolls the file to line 2
+key n
+stable 700 15000
+snap first
+snapstyle first
+key n
+stable 700 15000
+snap second
+key n
+stable 700 15000
+snap third
+# N walks back up to result 2 (line 6)
+key N
+stable 700 15000
+snap back
+# Esc abandons the input: the tag tail is restored
+key /
+text zz
+key esc
+settle 700
+stable 400 5000
+snap cancel
+# a no-match search: n has nowhere to go (nothing changes, no crash)
+key /
+text zzqq
+key enter
+stable 700 10000
+key n
+stable 400 5000
+snap nomatch
diff --git a/test/snapshots/ghostty-mid.golden b/test/snapshots/ghostty-mid.golden
new file mode 100644
index 00000000..929549c6
--- /dev/null
+++ b/test/snapshots/ghostty-mid.golden
@@ -0,0 +1,31 @@
+== snap ghostty-mid grid=100x30 cursor=4,7
+|Kill Newcol Tutor Debug Colors NextColor Dump
+| NOR /tmp/pardes-snap/ghostty-mid/cwd Del NOR /tmp/pardes-snap/ghostty-mid/cwd Del
+| ZZPAD
+| ./g.sh g.txt
+|
+| GHOSTOK
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+| NOR /tmp/pardes-snap/ghostty-mid/cwd Del
+|
+| g.txt
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
diff --git a/test/snapshots/ghostty-mid.snap b/test/snapshots/ghostty-mid.snap
new file mode 100644
index 00000000..437fce27
--- /dev/null
+++ b/test/snapshots/ghostty-mid.snap
@@ -0,0 +1,32 @@
+# ghostty's wire flavor of a middle click, byte-exact (mode 1002;1003;1004;1006
+# as pardes requests): focus-in, per-cell hover motions (ghostty dedups per
+# cell, so none repeat), press keeping SGR button identity, release 'm',
+# trailing hover — split across writes like real input. Proves the tty input
+# path (vaxis parse -> core execute) handles ghostty's encoding: the live bug
+# ("middle click dead only in ghostty") is ghostty's GTK apprt swallowing
+# middle press+release BEFORE mouse reporting whenever the desktop has
+# gtk-enable-primary-paste=false (apprt/gtk/class/surface.zig, gcMouseDown/
+# gcMouseUp) — the bytes below simply never get sent.
+file g.txt x
+start 30 100
+wait 8000 g.txt
+stable 700 20000
+press left 5 8
+release left 5 8
+stable 400 5000
+key c-b
+stable 600 8000
+text printf '#!/bin/sh\necho GHOST''OK\n' > g.sh; chmod +x g.sh; clear; printf 'ZZPAD\n./g.sh\n'
+key enter
+wait 10000 ./g.sh
+stable 700 10000
+key c-b
+stable 600 8000
+send \x1b[I
+send \x1b[<35;10;8M\x1b[<35;7;6M\x1b[<35;4;4M
+send \x1b[<1;4;4M
+send \x1b[<1;4;4m
+send \x1b[<35;6;4M
+wait 10000 GHOSTOK
+stable 700 10000
+snap ghostty-mid
diff --git a/test/snapshots/images.golden b/test/snapshots/images.golden
index b6e75fbf..ae12bedf 100644
--- a/test/snapshots/images.golden
+++ b/test/snapshots/images.golden
@@ -1,16 +1,13 @@
== 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
-| 🬝▀█
-| 🬝▀█
-| 🬝▀█
-| █🬆█
-| █🬆█
-| █🬆█
-| 🬝🬹█
-| nm /tmp/pardes-snap/images/cwd Del
+| img /tmp/pardes-snap/images/cwd/pic.ppm Petscii NOR /tmp/pardes-snap/images/cwd Del
+| 🬝🬂
+| 🬝🬂█ pic.ppm
+| 🬝🬂█
+| 🬝🬂
+| 🬝🬂█
+|╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌
+| NOR /tmp/pardes-snap/images/cwd Del
|
| pic.ppm
|
@@ -18,11 +15,14 @@
|
| pic.ppm
|
+| NOR /tmp/pardes-snap/images/cwd Del
+|
+| pic.ppm
+|
+|
|
|
-| nm /tmp/pardes-snap/images/cwd Del
|
-| pic.ppm
|
|
|
@@ -31,27 +31,27 @@
|
== 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,
+|1: 0-1 d,#6e4fd0, 2-49 #969696,#2c2a3e, 50-51 d,#383c54, 52-86 #969696,#2c2a3e, 87-99 d,#2c2a3e,
+|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-36 #969696,#2c2a3e, 37-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-36 #969696,#2c2a3e, 37-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,
@@ -62,27 +62,27 @@
|29: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
== 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,
+|1: 0-1 d,#6e4fd0, 2-49 #969696,#2c2a3e, 50-51 d,#383c54, 52-86 #969696,#2c2a3e, 87-99 d,#2c2a3e,
+|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-36 #969696,#2c2a3e, 37-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-36 #969696,#2c2a3e, 37-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,
@@ -93,27 +93,27 @@
|29: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
== 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,
+|1: 0-1 d,#6e4fd0, 2-49 #969696,#2c2a3e, 50-51 d,#383c54, 52-86 #969696,#2c2a3e, 87-99 d,#2c2a3e,
+|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-36 #969696,#2c2a3e, 37-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-36 #969696,#2c2a3e, 37-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..b54b765b
--- /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
+| NOR /tmp/pardes-snap/layout-close/cwd Del NOR /tmp/pardes-snap/layout-close/cwd Del
+|
+| marker.txt marker.txt
+|
+| NOR /tmp/pardes-snap/layout-close/cwd Del
+|
+| marker.txt
+|
+| NOR /tmp/pardes-snap/layout-close/cwd Del
+|
+| marker.txt
+|
+| NOR /tmp/pardes-snap/layout-close/cwd Del
+|
+| marker.txt
+|
+|
+|
+|
+|
+| NOR /tmp/pardes-snap/layout-close/cwd Del
+|
+| marker.txt
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+== snap altc grid=140x40 cursor=98,4
+|Kill Newcol Tutor Debug Colors NextColor Dump
+| NOR /tmp/pardes-snap/layout-close/cwd Del NOR /tmp/pardes-snap/layout-close/cwd Del NOR /tmp/pardes-snap/layout-close/cwd Del
+|
+| marker.txt marker.txt marker.txt
+|
+| NOR /tmp/pardes-snap/layout-close/cwd Del
+|
+| marker.txt
+|
+| NOR /tmp/pardes-snap/layout-close/cwd Del
+|
+| marker.txt
+|
+|
+|
+|
+|
+|
+|
+|
+|
+| NOR /tmp/pardes-snap/layout-close/cwd Del
+|
+| marker.txt
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+== snap del grid=140x40 cursor=98,4
+|Kill Newcol Tutor Debug Colors NextColor Dump
+| NOR /tmp/pardes-snap/layout-close/cwd Del NOR /tmp/pardes-snap/layout-close/cwd Del NOR /tmp/pardes-snap/layout-close/cwd Del
+|
+| marker.txt marker.txt marker.txt
+|
+|
+|
+|
+|
+| NOR /tmp/pardes-snap/layout-close/cwd Del
+|
+| marker.txt
+|
+|
+|
+|
+|
+|
+|
+|
+|
+| NOR /tmp/pardes-snap/layout-close/cwd Del
+|
+| marker.txt
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+== snap exit grid=140x40 cursor=4,7
+|Kill Newcol Tutor Debug Colors NextColor Dump
+| NOR /tmp/pardes-snap/layout-close/cwd Del NOR /tmp/pardes-snap/layout-close/cwd Del NOR /tmp/pardes-snap/layout-close/cwd Del
+|
+| marker.txt marker.txt marker.txt
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+| NOR /tmp/pardes-snap/layout-close/cwd Del
+|
+| marker.txt
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+== snap colclose grid=140x40 cursor=4,7
+|Kill Newcol Tutor Debug Colors NextColor Dump
+| NOR /tmp/pardes-snap/layout-close/cwd Del NOR /tmp/pardes-snap/layout-close/cwd Del
+|
+| marker.txt marker.txt
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+| NOR /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..c0690d3c
--- /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
+| NOR /tmp/pardes-snap/layout-open/cwd Del NOR /tmp/pardes-snap/layout-open/cwd Del
+|
+| sub sub
+|
+|
+|
+| echo one; echo two
+|
+|
+|
+|
+|
+|
+|
+|
+| NOR /tmp/pardes-snap/layout-open/cwd Del
+|
+| sub
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+== snap altn-left grid=100x30 cursor=4,8
+|Kill Newcol Tutor Debug Colors NextColor Dump
+| NOR /tmp/pardes-snap/layout-open/cwd Del NOR /tmp/pardes-snap/layout-open/cwd Del
+|
+| sub sub
+|
+| NOR /tmp/pardes-snap/layout-open/cwd Del
+|
+| sub
+|
+|
+|
+|
+|
+|
+|
+|
+| NOR /tmp/pardes-snap/layout-open/cwd Del
+|
+| sub
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+== snap altn-right grid=100x30 cursor=54,8
+|Kill Newcol Tutor Debug Colors NextColor Dump
+| NOR /tmp/pardes-snap/layout-open/cwd Del NOR /tmp/pardes-snap/layout-open/cwd Del
+|
+| sub sub
+|
+| NOR /tmp/pardes-snap/layout-open/cwd Del NOR /tmp/pardes-snap/layout-open/cwd Del
+|
+| sub sub
+|
+|
+|
+|
+|
+|
+|
+|
+| NOR /tmp/pardes-snap/layout-open/cwd Del
+|
+| sub
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+== snap file-open grid=100x30 cursor=7,2
+|Kill Newcol Tutor Debug Colors NextColor Dump
+| NOR /tmp/pardes-snap/layout-open/cwd/sub/f.txt S NOR /tmp/pardes-snap/layout-open/cwd Del
+| 1 echo 'TTY'OK
+| NOR /tmp/pardes-snap/layout-open/cwd Del sub
+|
+| NOR /tmp/pardes-snap/layout-open/cwd Del NOR /tmp/pardes-snap/layout-open/cwd Del
+|
+| sub sub
+|
+|
+|
+|
+|
+|
+|
+|
+| NOR /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
+| NOR /tmp/pardes-snap/layout-open/cwd/sub/f.txt S NOR /tmp/pardes-snap/layout-open/cwd Del
+| 1 echo 'TTY'OK
+| NOR /tmp/pardes-snap/layout-open/cwd Del sub
+|
+| NOR /tmp/pardes-snap/layout-open/cwd Del NOR /tmp/pardes-snap/layout-open/cwd Del
+|
+| sub sub
+|
+| NOR /tmp/pardes-snap/layout-open/cwd/sub Del
+| echo 'TTY'OK
+|
+| TTYOK
+|
+|
+|
+| NOR /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/load.golden b/test/snapshots/load.golden
index ade03fe3..5ca1bfc8 100644
--- a/test/snapshots/load.golden
+++ b/test/snapshots/load.golden
@@ -1,6 +1,6 @@
== snap loaded grid=100x30 cursor=4,15
|Kill Newcol Tutor Debug Colors NextColor Dump
-| nm /tmp/pardes-snap/load/cwd Del nm /tmp/pardes-snap/load/cwd Del
+| NOR /tmp/pardes-snap/load/cwd Del NOR /tmp/pardes-snap/load/cwd Del
|
| LOADMARK d.txt
| 1
@@ -15,7 +15,7 @@
| 10
| 11
| 12
-| nm /tmp/pardes-snap/load/cwd Del
+| NOR /tmp/pardes-snap/load/cwd Del
|
| d.txt
|
@@ -31,7 +31,7 @@
|
== style loaded
|0: 0-44 #969696,#2c2a3e, 45-99 d,#2c2a3e,
-|1: 0-1 d,#6e4fd0, 2-33 #969696,#2c2a3e, 34-49 d,#2c2a3e, 50-51 d,#383c54, 52-83 #969696,#2c2a3e, 84-99 d,#2c2a3e,
+|1: 0-1 d,#6e4fd0, 2-34 #969696,#2c2a3e, 35-49 d,#2c2a3e, 50-51 d,#383c54, 52-84 #969696,#2c2a3e, 85-99 d,#2c2a3e,
|2: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
|3: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
|4: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
@@ -46,7 +46,7 @@
|13: 0-1 d,#2a2a2a, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
|14: 0-1 d,#2a2a2a, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
|15: 0-1 d,#2a2a2a, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
-|16: 0-1 d,#383c54, 2-33 #969696,#2c2a3e, 34-49 d,#2c2a3e, 50-51 d,#525252, 52-99 d,d,
+|16: 0-1 d,#383c54, 2-34 #969696,#2c2a3e, 35-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,
diff --git a/test/snapshots/look-center.golden b/test/snapshots/look-center.golden
new file mode 100644
index 00000000..67ef9a71
--- /dev/null
+++ b/test/snapshots/look-center.golden
@@ -0,0 +1,93 @@
+== snap center-open grid=100x30 cursor=7,5
+|Kill Newcol Tutor Debug Colors NextColor Dump
+| NOR /tmp/pardes-snap/look-center/cwd/big.txt Sav NOR /tmp/pardes-snap/look-center/cwd Del
+| 97 line 97
+| 98 line 98 big.txt
+| 99 line 99
+| 100 line 100
+| 101 line 101
+|╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌
+| NOR /tmp/pardes-snap/look-center/cwd Del
+|
+| big.txt
+|
+|
+|
+| big.txt:100 big.txt:150 big.txt:2
+|
+| NOR /tmp/pardes-snap/look-center/cwd Del
+|
+| big.txt
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+== snap center-dedup grid=100x30 cursor=7,5
+|Kill Newcol Tutor Debug Colors NextColor Dump
+| NOR /tmp/pardes-snap/look-center/cwd/big.txt Sav NOR /tmp/pardes-snap/look-center/cwd Del
+| 147 line 147
+| 148 line 148 big.txt
+| 149 line 149
+| 150 line 150
+| 151 line 151
+| 152 line 152
+| NOR /tmp/pardes-snap/look-center/cwd Del
+|
+| big.txt
+|
+|
+|
+| big.txt:100 big.txt:150 big.txt:2
+|
+| NOR /tmp/pardes-snap/look-center/cwd Del
+|
+| big.txt
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+== snap center-clamp grid=100x30 cursor=7,3
+|Kill Newcol Tutor Debug Colors NextColor Dump
+| NOR /tmp/pardes-snap/look-center/cwd/big.txt Sav NOR /tmp/pardes-snap/look-center/cwd Del
+| 1 line 1
+| 2 line 2 big.txt
+| 3 line 3
+| 4 line 4
+| 5 line 5
+| 6 line 6
+| NOR /tmp/pardes-snap/look-center/cwd Del
+|
+| big.txt
+|
+|
+|
+| big.txt:100 big.txt:150 big.txt:2
+|
+| NOR /tmp/pardes-snap/look-center/cwd Del
+|
+| big.txt
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
diff --git a/test/snapshots/look-center.snap b/test/snapshots/look-center.snap
new file mode 100644
index 00000000..a56ff038
--- /dev/null
+++ b/test/snapshots/look-center.snap
@@ -0,0 +1,28 @@
+# a look on path:NN opens the file with the target line CENTERED in the body
+# (scroll = line - body/2): fresh open at a deep line, then dedup re-looks at
+# the same path re-center the existing pane, and a look near line 1 clamps
+# the scroll at 0 (no negative scroll)
+lines big.txt 200
+start 30 100
+wait 8000 big.txt
+stable 700 20000
+press left 5 8
+release left 5 8
+stable 400 5000
+key i
+text big.txt:100 big.txt:150 big.txt:2
+key esc
+settle 700
+stable 400 5000
+press right 7 8
+release right 7 8
+stable 700 15000
+snap center-open
+press right 18 15
+release right 18 15
+stable 700 15000
+snap center-dedup
+press right 30 15
+release right 30 15
+stable 700 15000
+snap center-clamp
diff --git a/test/snapshots/look-dir.actual b/test/snapshots/look-dir.actual
deleted file mode 100644
index 523560ba..00000000
--- a/test/snapshots/look-dir.actual
+++ /dev/null
@@ -1,31 +0,0 @@
-== snap dir-open grid=100x30 cursor=4,9
-|Kill Newcol Tutor Debug Colors NextColor Dump
-| nm /tmp/pardes-snap/look-dir/cwd Del nm /tmp/pardes-snap/look-dir/cwd Del
-|
-| sub top.txt sub top.txt
-|
-| nm /tmp/pardes-snap/look-dir/cwd/sub Del
-| ls
-|
-| inner.txt
-|
-|
-|
-|
-|
-|
-|
-| nm /tmp/pardes-snap/look-dir/cwd Del
-|
-| sub top.txt
-|
-|
-|
-|
-|
-|
-|
-|
-|
-|
-|
diff --git a/test/snapshots/look-dir.golden b/test/snapshots/look-dir.golden
index c4337878..ccd6b9e9 100644
--- a/test/snapshots/look-dir.golden
+++ b/test/snapshots/look-dir.golden
@@ -1,10 +1,10 @@
== snap dir-open grid=100x30 cursor=4,8
|Kill Newcol Tutor Debug Colors NextColor Dump
-| nm /tmp/pardes-snap/look-dir/cwd Del nm /tmp/pardes-snap/look-dir/cwd Del
+| NOR /tmp/pardes-snap/look-dir/cwd Del NOR /tmp/pardes-snap/look-dir/cwd Del
|
| sub top.txt sub top.txt
|
-| nm /tmp/pardes-snap/look-dir/cwd/sub Del
+| NOR /tmp/pardes-snap/look-dir/cwd/sub Del
|
| inner.txt
|
@@ -15,7 +15,7 @@
|
|
|
-| nm /tmp/pardes-snap/look-dir/cwd Del
+| NOR /tmp/pardes-snap/look-dir/cwd Del
|
| sub top.txt
|
diff --git a/test/snapshots/look-file.golden b/test/snapshots/look-file.golden
index 4f6d4a71..e3d40b84 100644
--- a/test/snapshots/look-file.golden
+++ b/test/snapshots/look-file.golden
@@ -1,16 +1,13 @@
-== snap file-open grid=100x30 cursor=7,2
+== snap file-open grid=100x30 cursor=7,5
|Kill Newcol Tutor Debug Colors NextColor Dump
-| nm /tmp/pardes-snap/look-file/cwd/big.txt Save D nm /tmp/pardes-snap/look-file/cwd Del
+| NOR /tmp/pardes-snap/look-file/cwd/big.txt Save NOR /tmp/pardes-snap/look-file/cwd Del
+| 37 line 37
+| 38 line 38 big.txt
+| 39 line 39
| 40 line 40
-| 41 line 41 big.txt
-| 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
+| 41 line 41
+|╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌
+| NOR /tmp/pardes-snap/look-file/cwd Del
|
| big.txt
|
@@ -18,11 +15,14 @@
|
| big.txt:40
|
+| NOR /tmp/pardes-snap/look-file/cwd Del
+|
+| big.txt
+|
+|
|
|
-| nm /tmp/pardes-snap/look-file/cwd Del
|
-| big.txt
|
|
|
@@ -31,27 +31,27 @@
|
== 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,
+|1: 0-1 d,#6e4fd0, 2-49 #969696,#2c2a3e, 50-51 d,#383c54, 52-89 #969696,#2c2a3e, 90-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 #969696,#2c2a3e, 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-39 #969696,#2c2a3e, 40-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-39 #969696,#2c2a3e, 40-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/modal.golden b/test/snapshots/modal.golden
index b4922f12..668fd02c 100644
--- a/test/snapshots/modal.golden
+++ b/test/snapshots/modal.golden
@@ -1,6 +1,6 @@
== snap top grid=100x30 cursor=2,2
|Kill Newcol Tutor Debug Colors NextColor Dump
-| nm /tmp/pardes-snap/modal/cwd Del nm /tmp/pardes-snap/modal/cwd Del
+| NOR /tmp/pardes-snap/modal/cwd Del NOR /tmp/pardes-snap/modal/cwd Del
|
| words.txt words.txt
|
@@ -15,7 +15,7 @@
|
|
|
-| nm /tmp/pardes-snap/modal/cwd Del
+| NOR /tmp/pardes-snap/modal/cwd Del
|
| words.txt
|
@@ -31,7 +31,7 @@
|
== snap moved grid=100x30 cursor=2,6
|Kill Newcol Tutor Debug Colors NextColor Dump
-| nm /tmp/pardes-snap/modal/cwd Del nm /tmp/pardes-snap/modal/cwd Del
+| NOR /tmp/pardes-snap/modal/cwd Del NOR /tmp/pardes-snap/modal/cwd Del
|
| words.txt words.txt
|
@@ -46,7 +46,7 @@
|
|
|
-| nm /tmp/pardes-snap/modal/cwd Del
+| NOR /tmp/pardes-snap/modal/cwd Del
|
| words.txt
|
@@ -62,7 +62,7 @@
|
== snap xsel grid=100x30 cursor=2,6
|Kill Newcol Tutor Debug Colors NextColor Dump
-| nm /tmp/pardes-snap/modal/cwd Del nm /tmp/pardes-snap/modal/cwd Del
+| NOR /tmp/pardes-snap/modal/cwd Del NOR /tmp/pardes-snap/modal/cwd Del
|
| words.txt words.txt
|
@@ -77,7 +77,7 @@
|
|
|
-| nm /tmp/pardes-snap/modal/cwd Del
+| NOR /tmp/pardes-snap/modal/cwd Del
|
| words.txt
|
@@ -93,7 +93,7 @@
|
== style xsel
|0: 0-44 #969696,#2c2a3e, 45-99 d,#2c2a3e,
-|1: 0-1 d,#6e4fd0, 2-34 #969696,#2c2a3e, 35-49 d,#2c2a3e, 50-51 d,#383c54, 52-84 #969696,#2c2a3e, 85-99 d,#2c2a3e,
+|1: 0-1 d,#6e4fd0, 2-35 #969696,#2c2a3e, 36-49 d,#2c2a3e, 50-51 d,#383c54, 52-85 #969696,#2c2a3e, 86-99 d,#2c2a3e,
|2: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
|3: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
|4: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
@@ -108,7 +108,7 @@
|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,#383c54, 2-34 #969696,#2c2a3e, 35-49 d,#2c2a3e, 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,
@@ -124,7 +124,7 @@
|29: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
== snap xsel2 grid=100x30 cursor=2,7
|Kill Newcol Tutor Debug Colors NextColor Dump
-| nm /tmp/pardes-snap/modal/cwd Del nm /tmp/pardes-snap/modal/cwd Del
+| NOR /tmp/pardes-snap/modal/cwd Del NOR /tmp/pardes-snap/modal/cwd Del
|
| words.txt words.txt
|
@@ -139,7 +139,7 @@
|
|
|
-| nm /tmp/pardes-snap/modal/cwd Del
+| NOR /tmp/pardes-snap/modal/cwd Del
|
| words.txt
|
@@ -155,7 +155,7 @@
|
== snap yanked grid=100x30 cursor=2,6
|Kill Newcol Tutor Debug Colors NextColor Dump
-| nm /tmp/pardes-snap/modal/cwd Del nm /tmp/pardes-snap/modal/cwd Del
+| NOR /tmp/pardes-snap/modal/cwd Del NOR /tmp/pardes-snap/modal/cwd Del
|
| words.txt words.txt
|
@@ -170,7 +170,7 @@
|
|
|
-| nm /tmp/pardes-snap/modal/cwd Del
+| NOR /tmp/pardes-snap/modal/cwd Del
|
| words.txt
|
@@ -186,7 +186,7 @@
|
== snap vsel grid=100x30 cursor=3,7
|Kill Newcol Tutor Debug Colors NextColor Dump
-| nm /tmp/pardes-snap/modal/cwd Del nm /tmp/pardes-snap/modal/cwd Del
+| NOR /tmp/pardes-snap/modal/cwd Del NOR /tmp/pardes-snap/modal/cwd Del
|
| words.txt words.txt
|
@@ -201,7 +201,7 @@
|
|
|
-| nm /tmp/pardes-snap/modal/cwd Del
+| NOR /tmp/pardes-snap/modal/cwd Del
|
| words.txt
|
@@ -217,7 +217,7 @@
|
== style vsel
|0: 0-44 #969696,#2c2a3e, 45-99 d,#2c2a3e,
-|1: 0-1 d,#6e4fd0, 2-34 #969696,#2c2a3e, 35-49 d,#2c2a3e, 50-51 d,#383c54, 52-84 #969696,#2c2a3e, 85-99 d,#2c2a3e,
+|1: 0-1 d,#6e4fd0, 2-35 #969696,#2c2a3e, 36-49 d,#2c2a3e, 50-51 d,#383c54, 52-85 #969696,#2c2a3e, 86-99 d,#2c2a3e,
|2: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
|3: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
|4: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
@@ -232,7 +232,7 @@
|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,#383c54, 2-34 #969696,#2c2a3e, 35-49 d,#2c2a3e, 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,
@@ -248,7 +248,7 @@
|29: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
== snap typed grid=100x30 cursor=3,7
|Kill Newcol Tutor Debug Colors NextColor Dump
-| nm /tmp/pardes-snap/modal/cwd Del nm /tmp/pardes-snap/modal/cwd Del
+| NOR /tmp/pardes-snap/modal/cwd Del NOR /tmp/pardes-snap/modal/cwd Del
|
| words.txt words.txt
|
@@ -263,7 +263,7 @@
|
|
|
-| nm /tmp/pardes-snap/modal/cwd Del
+| NOR /tmp/pardes-snap/modal/cwd Del
|
| words.txt
|
@@ -279,7 +279,7 @@
|
== snap undone grid=100x30 cursor=3,7
|Kill Newcol Tutor Debug Colors NextColor Dump
-| nm /tmp/pardes-snap/modal/cwd Del nm /tmp/pardes-snap/modal/cwd Del
+| NOR /tmp/pardes-snap/modal/cwd Del NOR /tmp/pardes-snap/modal/cwd Del
|
| words.txt words.txt
|
@@ -294,7 +294,7 @@
|
|
|
-| nm /tmp/pardes-snap/modal/cwd Del
+| NOR /tmp/pardes-snap/modal/cwd Del
|
| words.txt
|
@@ -310,7 +310,7 @@
|
== snap redone grid=100x30 cursor=3,7
|Kill Newcol Tutor Debug Colors NextColor Dump
-| nm /tmp/pardes-snap/modal/cwd Del nm /tmp/pardes-snap/modal/cwd Del
+| NOR /tmp/pardes-snap/modal/cwd Del NOR /tmp/pardes-snap/modal/cwd Del
|
| words.txt words.txt
|
@@ -325,7 +325,7 @@
|
|
|
-| nm /tmp/pardes-snap/modal/cwd Del
+| NOR /tmp/pardes-snap/modal/cwd Del
|
| words.txt
|
@@ -341,7 +341,7 @@
|
== snap bottom grid=100x30 cursor=2,9
|Kill Newcol Tutor Debug Colors NextColor Dump
-| nm /tmp/pardes-snap/modal/cwd Del nm /tmp/pardes-snap/modal/cwd Del
+| NOR /tmp/pardes-snap/modal/cwd Del NOR /tmp/pardes-snap/modal/cwd Del
|
| words.txt words.txt
|
@@ -356,7 +356,7 @@
|
|
|
-| nm /tmp/pardes-snap/modal/cwd Del
+| NOR /tmp/pardes-snap/modal/cwd Del
|
| words.txt
|
diff --git a/test/snapshots/respawn.golden b/test/snapshots/respawn.golden
new file mode 100644
index 00000000..2e5e1552
--- /dev/null
+++ b/test/snapshots/respawn.golden
@@ -0,0 +1,31 @@
+== snap respawn grid=100x30 cursor=4,8
+|Kill Newcol Tutor Debug Colors NextColor Dump
+| NOR /tmp/pardes-snap/respawn/cwd Del NOR /tmp/pardes-snap/respawn/cwd Del
+|
+|
+| TTY /tmp/pardes-snap/respawn/cwd Del
+| $ ls
+| $ echo RESP''AWNOK
+| RESPAWNOK
+| $
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
diff --git a/test/snapshots/respawn.snap b/test/snapshots/respawn.snap
new file mode 100644
index 00000000..fbed77e1
--- /dev/null
+++ b/test/snapshots/respawn.snap
@@ -0,0 +1,21 @@
+# a deleted shell pane's pty lingers in its slot (there is no close effect);
+# a later spawn reusing the pane id must reap it instead of tripping the
+# drainEffects spawn assert — this exact sequence crashed pre-fix
+start 30 100
+wait 8000 Kill Newcol
+stable 700 20000
+# middle-click Del on the lower-left pane's tag: the pane id is freed while
+# its shell process stays alive in the pty slot
+press middle 36 17
+release middle 36 17
+stable 700 10000
+# Alt-n reuses the freed id -> spawn effect lands on the occupied slot
+key a-n
+stable 700 15000
+key c-b
+stable 600 8000
+text echo RESP''AWNOK
+key enter
+wait 10000 RESPAWNOK
+stable 700 10000
+snap respawn
diff --git a/test/snapshots/scroll.golden b/test/snapshots/scroll.golden
index 899c7dec..971f9659 100644
--- a/test/snapshots/scroll.golden
+++ b/test/snapshots/scroll.golden
@@ -1,6 +1,6 @@
== snap bottom grid=100x30 cursor=4,15
|Kill Newcol Tutor Debug Colors NextColor Dump
-| nm /tmp/pardes-snap/scroll/cwd Del nm /tmp/pardes-snap/scroll/cwd Del
+| NOR /tmp/pardes-snap/scroll/cwd Del NOR /tmp/pardes-snap/scroll/cwd Del
| 188
| 189 s.txt
| 190
@@ -15,7 +15,7 @@
| 199
| 200
|
-| nm /tmp/pardes-snap/scroll/cwd Del
+| NOR /tmp/pardes-snap/scroll/cwd Del
|
| s.txt
|
@@ -31,7 +31,7 @@
|
== snap wheel3 grid=100x30 cursor=4,15
|Kill Newcol Tutor Debug Colors NextColor Dump
-| nm /tmp/pardes-snap/scroll/cwd Del nm /tmp/pardes-snap/scroll/cwd Del
+| NOR /tmp/pardes-snap/scroll/cwd Del NOR /tmp/pardes-snap/scroll/cwd Del
| 185
| 186 s.txt
| 187
@@ -46,7 +46,7 @@
| 196
| 197
| 198
-| nm /tmp/pardes-snap/scroll/cwd Del
+| NOR /tmp/pardes-snap/scroll/cwd Del
|
| s.txt
|
@@ -62,7 +62,7 @@
|
== snap gutter-up grid=100x30 cursor=4,15
|Kill Newcol Tutor Debug Colors NextColor Dump
-| nm /tmp/pardes-snap/scroll/cwd Del nm /tmp/pardes-snap/scroll/cwd Del
+| NOR /tmp/pardes-snap/scroll/cwd Del NOR /tmp/pardes-snap/scroll/cwd Del
| 178
| 179 s.txt
| 180
@@ -77,7 +77,7 @@
| 189
| 190
| 191
-| nm /tmp/pardes-snap/scroll/cwd Del
+| NOR /tmp/pardes-snap/scroll/cwd Del
|
| s.txt
|
@@ -93,7 +93,7 @@
|
== snap gutter-down grid=100x30 cursor=4,15
|Kill Newcol Tutor Debug Colors NextColor Dump
-| nm /tmp/pardes-snap/scroll/cwd Del nm /tmp/pardes-snap/scroll/cwd Del
+| NOR /tmp/pardes-snap/scroll/cwd Del NOR /tmp/pardes-snap/scroll/cwd Del
| 180
| 181 s.txt
| 182
@@ -108,7 +108,7 @@
| 191
| 192
| 193
-| nm /tmp/pardes-snap/scroll/cwd Del
+| NOR /tmp/pardes-snap/scroll/cwd Del
|
| s.txt
|
@@ -124,7 +124,7 @@
|
== snap wheel-down grid=100x30 cursor=4,15
|Kill Newcol Tutor Debug Colors NextColor Dump
-| nm /tmp/pardes-snap/scroll/cwd Del nm /tmp/pardes-snap/scroll/cwd Del
+| NOR /tmp/pardes-snap/scroll/cwd Del NOR /tmp/pardes-snap/scroll/cwd Del
| 181
| 182 s.txt
| 183
@@ -139,7 +139,7 @@
| 192
| 193
| 194
-| nm /tmp/pardes-snap/scroll/cwd Del
+| NOR /tmp/pardes-snap/scroll/cwd Del
|
| s.txt
|
@@ -155,7 +155,7 @@
|
== style wheel-down
|0: 0-44 #969696,#2c2a3e, 45-99 d,#2c2a3e,
-|1: 0-1 d,#6e4fd0, 2-35 #969696,#2c2a3e, 36-49 d,#2c2a3e, 50-51 d,#383c54, 52-85 #969696,#2c2a3e, 86-99 d,#2c2a3e,
+|1: 0-1 d,#6e4fd0, 2-36 #969696,#2c2a3e, 37-49 d,#2c2a3e, 50-51 d,#383c54, 52-86 #969696,#2c2a3e, 87-99 d,#2c2a3e,
|2: 0-1 d,#2a2a2a, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
|3: 0-1 d,#2a2a2a, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
|4: 0-1 d,#2a2a2a, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
@@ -170,7 +170,7 @@
|13: 0-1 d,#2a2a2a, 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,#2a2a2a, 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,
+|16: 0-1 d,#383c54, 2-36 #969696,#2c2a3e, 37-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,
diff --git a/test/snapshots/scrolloff.golden b/test/snapshots/scrolloff.golden
new file mode 100644
index 00000000..90e0e83f
--- /dev/null
+++ b/test/snapshots/scrolloff.golden
@@ -0,0 +1,217 @@
+== snap top grid=100x30 cursor=7,2
+|Kill Newcol Tutor Debug Colors NextColor Dump
+| NOR /tmp/pardes-snap/scrolloff/cwd/g.txt Save De NOR /tmp/pardes-snap/scrolloff/cwd Del
+| 1 line 1
+| 2 line 2 g.txt
+| 3 line 3
+| 4 line 4
+| 5 line 5
+| 6 line 6
+| NOR /tmp/pardes-snap/scrolloff/cwd Del
+|
+| g.txt
+|
+|
+|
+|
+|
+| NOR /tmp/pardes-snap/scrolloff/cwd Del
+|
+| g.txt
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+== snap edge grid=100x30 cursor=7,5
+|Kill Newcol Tutor Debug Colors NextColor Dump
+| NOR /tmp/pardes-snap/scrolloff/cwd/g.txt Save De NOR /tmp/pardes-snap/scrolloff/cwd Del
+| 3 line 3
+| 4 line 4 g.txt
+| 5 line 5
+| 6 line 6
+| 7 line 7
+| 8 line 8
+| NOR /tmp/pardes-snap/scrolloff/cwd Del
+|
+| g.txt
+|
+|
+|
+|
+|
+| NOR /tmp/pardes-snap/scrolloff/cwd Del
+|
+| g.txt
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+== snap scrolled1 grid=100x30 cursor=7,5
+|Kill Newcol Tutor Debug Colors NextColor Dump
+| NOR /tmp/pardes-snap/scrolloff/cwd/g.txt Save De NOR /tmp/pardes-snap/scrolloff/cwd Del
+| 4 line 4
+| 5 line 5 g.txt
+| 6 line 6
+| 7 line 7
+| 8 line 8
+| 9 line 9
+| NOR /tmp/pardes-snap/scrolloff/cwd Del
+|
+| g.txt
+|
+|
+|
+|
+|
+| NOR /tmp/pardes-snap/scrolloff/cwd Del
+|
+| g.txt
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+== snap jdown grid=100x30 cursor=7,5
+|Kill Newcol Tutor Debug Colors NextColor Dump
+| NOR /tmp/pardes-snap/scrolloff/cwd/g.txt Save De NOR /tmp/pardes-snap/scrolloff/cwd Del
+| 8 line 8
+| 9 line 9 g.txt
+| 10 line 10
+| 11 line 11
+| 12 line 12
+| 13 line 13
+| NOR /tmp/pardes-snap/scrolloff/cwd Del
+|
+| g.txt
+|
+|
+|
+|
+|
+| NOR /tmp/pardes-snap/scrolloff/cwd Del
+|
+| g.txt
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+== snap end grid=100x30 cursor=7,7
+|Kill Newcol Tutor Debug Colors NextColor Dump
+| NOR /tmp/pardes-snap/scrolloff/cwd/g.txt Save De NOR /tmp/pardes-snap/scrolloff/cwd Del
+| 36 line 36
+| 37 line 37 g.txt
+| 38 line 38
+| 39 line 39
+| 40 line 40
+| 41
+| NOR /tmp/pardes-snap/scrolloff/cwd Del
+|
+| g.txt
+|
+|
+|
+|
+|
+| NOR /tmp/pardes-snap/scrolloff/cwd Del
+|
+| g.txt
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+== snap kup grid=100x30 cursor=7,4
+|Kill Newcol Tutor Debug Colors NextColor Dump
+| NOR /tmp/pardes-snap/scrolloff/cwd/g.txt Save De NOR /tmp/pardes-snap/scrolloff/cwd Del
+| 31 line 31
+| 32 line 32 g.txt
+| 33 line 33
+| 34 line 34
+| 35 line 35
+| 36 line 36
+| NOR /tmp/pardes-snap/scrolloff/cwd Del
+|
+| g.txt
+|
+|
+|
+|
+|
+| NOR /tmp/pardes-snap/scrolloff/cwd Del
+|
+| g.txt
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+== snap top2 grid=100x30 cursor=7,2
+|Kill Newcol Tutor Debug Colors NextColor Dump
+| NOR /tmp/pardes-snap/scrolloff/cwd/g.txt Save De NOR /tmp/pardes-snap/scrolloff/cwd Del
+| 1 line 1
+| 2 line 2 g.txt
+| 3 line 3
+| 4 line 4
+| 5 line 5
+| 6 line 6
+| NOR /tmp/pardes-snap/scrolloff/cwd Del
+|
+| g.txt
+|
+|
+|
+|
+|
+| NOR /tmp/pardes-snap/scrolloff/cwd Del
+|
+| g.txt
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
diff --git a/test/snapshots/scrolloff.snap b/test/snapshots/scrolloff.snap
new file mode 100644
index 00000000..e231e8de
--- /dev/null
+++ b/test/snapshots/scrolloff.snap
@@ -0,0 +1,41 @@
+# 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
+start 30 100
+wait 8000 g.txt
+stable 700 20000
+# right-click the g.txt name in the greeting ls -> file pane, 9 body rows
+press right 4 4
+release right 4 4
+wait 10000 line 3
+stable 700 15000
+press left 10 3
+release left 10 3
+stable 400 5000
+# (b) gg: cursor CAN sit on the top body row, no forced scroll
+key g g
+stable 400 5000
+snap top
+# (a) five j's reach the bottom margin (visual row 5 of 9) without scrolling...
+key j j j j j
+stable 400 5000
+snap edge
+# ...the sixth j scrolls: view slides one line, cursor holds the margin
+key j
+stable 400 5000
+snap scrolled1
+key j j j j
+stable 400 5000
+snap jdown
+# (d) G: bottom clamp, view stops at EOF-at-bottom, cursor on the bottom row
+key G
+stable 400 5000
+snap end
+# (c) k-walk up: cursor climbs to the top margin, then the view scrolls
+key k k k k k k k k
+stable 400 5000
+snap kup
+# (b) again from deep in the file: gg puts the cursor back on the top row
+key g g
+stable 400 5000
+snap top2
diff --git a/test/snapshots/syntax.actual b/test/snapshots/syntax.actual
deleted file mode 100644
index d8c537b7..00000000
--- a/test/snapshots/syntax.actual
+++ /dev/null
@@ -1,124 +0,0 @@
-== snap zig-open grid=100x30 cursor=7,2
-|Kill Newcol Tutor Debug Colors NextColor Dump
-| nm /tmp/pardes-snap/syntax/cwd/demo.zig Save Del nm /tmp/pardes-snap/syntax/cwd Del
-| 1 const std = @import("std"); // greet
-| 2 pub fn main() void { demo.zig
-| 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
-|
-|
-|
-|
-|
-|
-== style zig-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,#525252, 2-6 #5a5a5a,d, 7-18 d,d, 19-25 #cc70d8,d,b 26-26 d,d, 27-31 #8ab87a,d, 32-34 d,d, 35-42 #f0f0f0,d,b 43-49 d,d, 50-51 d,#525252, 52-99 d,d,
-|3: 0-1 d,#525252, 2-6 #5a5a5a,d, 7-10 d,d, 11-12 #cc70d8,d,b 13-49 d,d, 50-51 d,#525252, 52-99 d,d,
-|4: 0-1 d,#525252, 2-6 #5a5a5a,d, 7-23 d,d, 24-25 #d0c070,d, 26-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,#525252, 2-6 #5a5a5a,d, 7-49 d,d, 50-51 d,#525252, 52-99 d,d,
-|7: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
-|8: 0-1 d,#525252, 2-49 d,d, 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,#383c54, 2-35 #969696,#2c2a3e, 36-49 d,#2c2a3e, 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,
-|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,
-|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,
-|25: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
-|26: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
-|27: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
-|28: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
-|29: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
-== style colors-off
-|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,#525252, 2-6 #5a5a5a,d, 7-49 d,d, 50-51 d,#525252, 52-99 d,d,
-|3: 0-1 d,#525252, 2-6 #5a5a5a,d, 7-49 d,d, 50-51 d,#525252, 52-99 d,d,
-|4: 0-1 d,#525252, 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,#525252, 2-6 #5a5a5a,d, 7-49 d,d, 50-51 d,#525252, 52-99 d,d,
-|7: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
-|8: 0-1 d,#525252, 2-49 d,d, 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,#383c54, 2-35 #969696,#2c2a3e, 36-49 d,#2c2a3e, 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,
-|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,
-|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,
-|25: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
-|26: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
-|27: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
-|28: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
-|29: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
-== style colors-on
-|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,#525252, 2-6 #5a5a5a,d, 7-18 d,d, 19-25 #cc70d8,d,b 26-26 d,d, 27-31 #8ab87a,d, 32-34 d,d, 35-42 #f0f0f0,d,b 43-49 d,d, 50-51 d,#525252, 52-99 d,d,
-|3: 0-1 d,#525252, 2-6 #5a5a5a,d, 7-10 d,d, 11-12 #cc70d8,d,b 13-49 d,d, 50-51 d,#525252, 52-99 d,d,
-|4: 0-1 d,#525252, 2-6 #5a5a5a,d, 7-23 d,d, 24-25 #d0c070,d, 26-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,#525252, 2-6 #5a5a5a,d, 7-49 d,d, 50-51 d,#525252, 52-99 d,d,
-|7: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
-|8: 0-1 d,#525252, 2-49 d,d, 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,#383c54, 2-35 #969696,#2c2a3e, 36-49 d,#2c2a3e, 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,
-|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,
-|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,
-|25: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
-|26: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
-|27: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
-|28: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
-|29: 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..f6d673a3 100644
--- a/test/snapshots/syntax.golden
+++ b/test/snapshots/syntax.golden
@@ -1,28 +1,28 @@
== snap zig-open grid=100x30 cursor=7,2
|Kill Newcol Tutor Debug Colors NextColor Dump
-| nm /tmp/pardes-snap/syntax/cwd/demo.zig Save Del nm /tmp/pardes-snap/syntax/cwd Del
+| NOR /tmp/pardes-snap/syntax/cwd/demo.zig Save De NOR /tmp/pardes-snap/syntax/cwd Del
| 1 const std = @import("std"); // greet
| 2 pub fn main() void { demo.zig
| 3 var x: u32 = 42;
| 4 _ = x;
| 5 }
+|╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌
+| NOR /tmp/pardes-snap/syntax/cwd Del
|
+| demo.zig
|
|
|
-| nm /tmp/pardes-snap/syntax/cwd Del
-|
-| demo.zig
+| demo.zig
|
+| NOR /tmp/pardes-snap/syntax/cwd Del
|
+| demo.zig
|
-| demo.zig
|
|
|
-| nm /tmp/pardes-snap/syntax/cwd Del
|
-| demo.zig
|
|
|
@@ -31,27 +31,27 @@
|
== style zig-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,#525252, 2-6 #5a5a5a,d, 7-18 d,d, 19-25 #cc70d8,d,b 26-26 d,d, 27-31 #8ab87a,d, 32-34 d,d, 35-42 #f0f0f0,d,b 43-49 d,d, 50-51 d,#525252, 52-99 d,d,
+|1: 0-1 d,#6e4fd0, 2-49 #969696,#2c2a3e, 50-51 d,#383c54, 52-86 #969696,#2c2a3e, 87-99 d,#2c2a3e,
+|2: 0-1 d,#525252, 2-6 #969696,#2c2a3e, 7-18 d,d, 19-25 #cc70d8,d,b 26-26 d,d, 27-31 #8ab87a,d, 32-34 d,d, 35-42 #f0f0f0,d,b 43-49 d,d, 50-51 d,#525252, 52-99 d,d,
|3: 0-1 d,#525252, 2-6 #5a5a5a,d, 7-10 d,d, 11-12 #cc70d8,d,b 13-49 d,d, 50-51 d,#525252, 52-99 d,d,
|4: 0-1 d,#525252, 2-6 #5a5a5a,d, 7-23 d,d, 24-25 #d0c070,d, 26-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,#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-36 #969696,#2c2a3e, 37-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-36 #969696,#2c2a3e, 37-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,
@@ -62,27 +62,27 @@
|29: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
== style colors-off
|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,#525252, 2-6 #5a5a5a,d, 7-49 d,d, 50-51 d,#525252, 52-99 d,d,
+|1: 0-1 d,#6e4fd0, 2-49 #969696,#2c2a3e, 50-51 d,#383c54, 52-86 #969696,#2c2a3e, 87-99 d,#2c2a3e,
+|2: 0-1 d,#525252, 2-6 #969696,#2c2a3e, 7-49 d,d, 50-51 d,#525252, 52-99 d,d,
|3: 0-1 d,#525252, 2-6 #5a5a5a,d, 7-49 d,d, 50-51 d,#525252, 52-99 d,d,
|4: 0-1 d,#525252, 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,#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-36 #969696,#2c2a3e, 37-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-36 #969696,#2c2a3e, 37-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,
@@ -93,27 +93,27 @@
|29: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
== style colors-on
|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,#525252, 2-6 #5a5a5a,d, 7-18 d,d, 19-25 #cc70d8,d,b 26-26 d,d, 27-31 #8ab87a,d, 32-34 d,d, 35-42 #f0f0f0,d,b 43-49 d,d, 50-51 d,#525252, 52-99 d,d,
+|1: 0-1 d,#6e4fd0, 2-49 #969696,#2c2a3e, 50-51 d,#383c54, 52-86 #969696,#2c2a3e, 87-99 d,#2c2a3e,
+|2: 0-1 d,#525252, 2-6 #969696,#2c2a3e, 7-18 d,d, 19-25 #cc70d8,d,b 26-26 d,d, 27-31 #8ab87a,d, 32-34 d,d, 35-42 #f0f0f0,d,b 43-49 d,d, 50-51 d,#525252, 52-99 d,d,
|3: 0-1 d,#525252, 2-6 #5a5a5a,d, 7-10 d,d, 11-12 #cc70d8,d,b 13-49 d,d, 50-51 d,#525252, 52-99 d,d,
|4: 0-1 d,#525252, 2-6 #5a5a5a,d, 7-23 d,d, 24-25 #d0c070,d, 26-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,#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-36 #969696,#2c2a3e, 37-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-36 #969696,#2c2a3e, 37-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/tag.golden b/test/snapshots/tag.golden
index 9275777b..9632ab6a 100644
--- a/test/snapshots/tag.golden
+++ b/test/snapshots/tag.golden
@@ -1,6 +1,6 @@
-== snap tag-focus grid=100x30 cursor=33,1
+== snap tag-focus grid=100x30 cursor=34,1
|Kill Newcol Tutor Debug Colors NextColor Dump
-| nm /tmp/pardes-snap/tag/cwd Del nm /tmp/pardes-snap/tag/cwd Del
+| NOR /tmp/pardes-snap/tag/cwd Del NOR /tmp/pardes-snap/tag/cwd Del
|
| t.txt t.txt
|
@@ -15,7 +15,7 @@
|
|
|
-| nm /tmp/pardes-snap/tag/cwd Del
+| NOR /tmp/pardes-snap/tag/cwd Del
|
| t.txt
|
@@ -29,9 +29,9 @@
|
|
|
-== snap tag-typed grid=100x30 cursor=46,1
+== snap tag-typed grid=100x30 cursor=47,1
|Kill Newcol Tutor Debug Colors NextColor Dump
-| nm /tmp/pardes-snap/tag/cwd Del echo TAG''OK nm /tmp/pardes-snap/tag/cwd Del
+| NOR /tmp/pardes-snap/tag/cwd Del echo TAG''OK NOR /tmp/pardes-snap/tag/cwd Del
|
| t.txt t.txt
|
@@ -46,7 +46,7 @@
|
|
|
-| nm /tmp/pardes-snap/tag/cwd Del
+| NOR /tmp/pardes-snap/tag/cwd Del
|
| t.txt
|
@@ -60,9 +60,9 @@
|
|
|
-== snap tag-exec grid=100x30 cursor=45,1
+== snap tag-exec grid=100x30 cursor=46,1
|Kill Newcol Tutor Debug Colors NextColor Dump
-| nm /tmp/pardes-snap/tag/cwd Del echo TAG''OK nm /tmp/pardes-snap/tag/cwd Del
+| NOR /tmp/pardes-snap/tag/cwd Del echo TAG''OK NOR /tmp/pardes-snap/tag/cwd Del
|
| t.txt t.txt
|
@@ -77,7 +77,7 @@
|
|
|
-| nm /tmp/pardes-snap/tag/cwd Del
+| NOR /tmp/pardes-snap/tag/cwd Del
|
| t.txt
|
@@ -91,9 +91,9 @@
|
|
|
-== snap tag-vsel grid=100x30 cursor=31,1
+== snap tag-vsel grid=100x30 cursor=32,1
|Kill Newcol Tutor Debug Colors NextColor Dump
-| nm /tmp/pardes-snap/tag/cwd Del echo TAG''OK nm /tmp/pardes-snap/tag/cwd Del
+| NOR /tmp/pardes-snap/tag/cwd Del echo TAG''OK NOR /tmp/pardes-snap/tag/cwd Del
|
| t.txt t.txt
|
@@ -108,7 +108,7 @@
|
|
|
-| nm /tmp/pardes-snap/tag/cwd Del
+| NOR /tmp/pardes-snap/tag/cwd Del
|
| t.txt
|
@@ -124,7 +124,7 @@
|
== style tag-vsel
|0: 0-44 #969696,#2c2a3e, 45-99 d,#2c2a3e,
-|1: 0-1 d,#6e4fd0, 2-28 #969696,#2c2a3e, 29-31 #d8c8a8,#4a3a1e, 32-45 #969696,#2c2a3e, 46-49 d,#2c2a3e, 50-51 d,#383c54, 52-82 #969696,#2c2a3e, 83-99 d,#2c2a3e,
+|1: 0-1 d,#6e4fd0, 2-29 #969696,#2c2a3e, 30-32 #d8c8a8,#4a3a1e, 33-46 #969696,#2c2a3e, 47-49 d,#2c2a3e, 50-51 d,#383c54, 52-83 #969696,#2c2a3e, 84-99 d,#2c2a3e,
|2: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
|3: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
|4: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
@@ -139,7 +139,7 @@
|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,#383c54, 2-32 #969696,#2c2a3e, 33-49 d,#2c2a3e, 50-51 d,#525252, 52-99 d,d,
+|16: 0-1 d,#383c54, 2-33 #969696,#2c2a3e, 34-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,
@@ -153,9 +153,9 @@
|27: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
|28: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
|29: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
-== snap tag-del grid=100x30 cursor=29,1
+== snap tag-del grid=100x30 cursor=30,1
|Kill Newcol Tutor Debug Colors NextColor Dump
-| nm /tmp/pardes-snap/tag/cwdl echo TAG''OK nm /tmp/pardes-snap/tag/cwd Del
+| NOR /tmp/pardes-snap/tag/cwdl echo TAG''OK NOR /tmp/pardes-snap/tag/cwd Del
|
| t.txt t.txt
|
@@ -170,7 +170,7 @@
|
|
|
-| nm /tmp/pardes-snap/tag/cwd Del
+| NOR /tmp/pardes-snap/tag/cwd Del
|
| t.txt
|
@@ -186,7 +186,7 @@
|
== snap tag-exit grid=100x30 cursor=4,6
|Kill Newcol Tutor Debug Colors NextColor Dump
-| nm /tmp/pardes-snap/tag/cwdl echo TAG''OK nm /tmp/pardes-snap/tag/cwd Del
+| NOR /tmp/pardes-snap/tag/cwdl echo TAG''OK NOR /tmp/pardes-snap/tag/cwd Del
|
| t.txt t.txt
|
@@ -201,7 +201,7 @@
|
|
|
-| nm /tmp/pardes-snap/tag/cwd Del
+| NOR /tmp/pardes-snap/tag/cwd Del
|
| t.txt
|
diff --git a/test/snapshots/theme.golden b/test/snapshots/theme.golden
index b90e0011..5435eee4 100644
--- a/test/snapshots/theme.golden
+++ b/test/snapshots/theme.golden
@@ -1,6 +1,6 @@
== snap acme grid=100x30 cursor=4,4
|Kill Newcol Tutor Debug Colors NextColor Dump
-| nm /tmp/pardes-snap/theme/cwd Del nm /tmp/pardes-snap/theme/cwd Del
+| NOR /tmp/pardes-snap/theme/cwd Del NOR /tmp/pardes-snap/theme/cwd Del
|
| t.txt t.txt
|
@@ -15,7 +15,7 @@
|
|
|
-| nm /tmp/pardes-snap/theme/cwd Del
+| NOR /tmp/pardes-snap/theme/cwd Del
|
| t.txt
|
@@ -31,7 +31,7 @@
|
== style acme
|0: 0-44 #000000,#eaffff, 45-99 d,#eaffff,
-|1: 0-1 d,#6e4fd0, 2-34 #000000,#eaffff, 35-49 d,#eaffff, 50-51 d,#383c54, 52-84 #000000,#eaffff, 85-99 d,#eaffff,
+|1: 0-1 d,#6e4fd0, 2-35 #000000,#eaffff, 36-49 d,#eaffff, 50-51 d,#383c54, 52-85 #000000,#eaffff, 86-99 d,#eaffff,
|2: 0-1 d,#ffffea, 2-49 #000000,#ffffea, 50-51 d,#ffffea, 52-99 #000000,#ffffea,
|3: 0-1 d,#ffffea, 2-49 #000000,#ffffea, 50-51 d,#ffffea, 52-99 #000000,#ffffea,
|4: 0-1 d,#ffffea, 2-49 #000000,#ffffea, 50-51 d,#ffffea, 52-99 #000000,#ffffea,
@@ -46,7 +46,7 @@
|13: 0-1 d,#ffffea, 2-49 #000000,#ffffea, 50-51 d,#ffffea, 52-99 #000000,#ffffea,
|14: 0-1 d,#ffffea, 2-49 #000000,#ffffea, 50-51 d,#ffffea, 52-99 #000000,#ffffea,
|15: 0-1 d,#ffffea, 2-49 #000000,#ffffea, 50-51 d,#ffffea, 52-99 #000000,#ffffea,
-|16: 0-1 d,#383c54, 2-34 #000000,#eaffff, 35-49 d,#eaffff, 50-51 d,#ffffea, 52-99 #000000,#ffffea,
+|16: 0-1 d,#383c54, 2-35 #000000,#eaffff, 36-49 d,#eaffff, 50-51 d,#ffffea, 52-99 #000000,#ffffea,
|17: 0-1 d,#ffffea, 2-49 #000000,#ffffea, 50-51 d,#ffffea, 52-99 #000000,#ffffea,
|18: 0-1 d,#ffffea, 2-49 #000000,#ffffea, 50-51 d,#ffffea, 52-99 #000000,#ffffea,
|19: 0-1 d,#ffffea, 2-49 #000000,#ffffea, 50-51 d,#ffffea, 52-99 #000000,#ffffea,
@@ -62,7 +62,7 @@
|29: 0-1 d,#ffffea, 2-49 #000000,#ffffea, 50-51 d,#ffffea, 52-99 #000000,#ffffea,
== snap colors-off grid=100x30 cursor=4,4
|Kill Newcol Tutor Debug Colors NextColor Dump
-| nm /tmp/pardes-snap/theme/cwd Del nm /tmp/pardes-snap/theme/cwd Del
+| NOR /tmp/pardes-snap/theme/cwd Del NOR /tmp/pardes-snap/theme/cwd Del
|
| t.txt t.txt
|
@@ -77,7 +77,7 @@
|
|
|
-| nm /tmp/pardes-snap/theme/cwd Del
+| NOR /tmp/pardes-snap/theme/cwd Del
|
| t.txt
|
@@ -93,7 +93,7 @@
|
== style colors-off
|0: 0-44 #000000,#eaffff, 45-99 d,#eaffff,
-|1: 0-1 d,#6e4fd0, 2-34 #000000,#eaffff, 35-49 d,#eaffff, 50-51 d,#383c54, 52-84 #000000,#eaffff, 85-99 d,#eaffff,
+|1: 0-1 d,#6e4fd0, 2-35 #000000,#eaffff, 36-49 d,#eaffff, 50-51 d,#383c54, 52-85 #000000,#eaffff, 86-99 d,#eaffff,
|2: 0-99 d,#ffffea,
|3: 0-1 d,#ffffea, 2-6 #000000,#ffffea, 7-51 d,#ffffea, 52-56 #000000,#ffffea, 57-99 d,#ffffea,
|4: 0-99 d,#ffffea,
@@ -108,7 +108,7 @@
|13: 0-99 d,#ffffea,
|14: 0-99 d,#ffffea,
|15: 0-99 d,#ffffea,
-|16: 0-1 d,#383c54, 2-34 #000000,#eaffff, 35-49 d,#eaffff, 50-99 d,#ffffea,
+|16: 0-1 d,#383c54, 2-35 #000000,#eaffff, 36-49 d,#eaffff, 50-99 d,#ffffea,
|17: 0-99 d,#ffffea,
|18: 0-1 d,#ffffea, 2-6 #000000,#ffffea, 7-99 d,#ffffea,
|19: 0-99 d,#ffffea,
@@ -124,7 +124,7 @@
|29: 0-99 d,#ffffea,
== snap dark-again grid=100x30 cursor=4,4
|Kill Newcol Tutor Debug Colors NextColor Dump
-| nm /tmp/pardes-snap/theme/cwd Del nm /tmp/pardes-snap/theme/cwd Del
+| NOR /tmp/pardes-snap/theme/cwd Del NOR /tmp/pardes-snap/theme/cwd Del
|
| t.txt t.txt
|
@@ -139,7 +139,7 @@
|
|
|
-| nm /tmp/pardes-snap/theme/cwd Del
+| NOR /tmp/pardes-snap/theme/cwd Del
|
| t.txt
|
@@ -155,7 +155,7 @@
|
== style dark-again
|0: 0-44 #969696,#2c2a3e, 45-99 d,#2c2a3e,
-|1: 0-1 d,#6e4fd0, 2-34 #969696,#2c2a3e, 35-49 d,#2c2a3e, 50-51 d,#383c54, 52-84 #969696,#2c2a3e, 85-99 d,#2c2a3e,
+|1: 0-1 d,#6e4fd0, 2-35 #969696,#2c2a3e, 36-49 d,#2c2a3e, 50-51 d,#383c54, 52-85 #969696,#2c2a3e, 86-99 d,#2c2a3e,
|2: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
|3: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
|4: 0-1 d,#525252, 2-49 d,d, 50-51 d,#525252, 52-99 d,d,
@@ -170,7 +170,7 @@
|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,#383c54, 2-34 #969696,#2c2a3e, 35-49 d,#2c2a3e, 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,
diff --git a/test/snapshots/tty.golden b/test/snapshots/tty.golden
index 7e6bebc5..63e4a760 100644
--- a/test/snapshots/tty.golden
+++ b/test/snapshots/tty.golden
@@ -1,6 +1,6 @@
== snap tty-on grid=100x30 cursor=4,4
|Kill Newcol Tutor Debug Colors NextColor Dump
-| sy /tmp/pardes-snap/tty/cwd Del nm /tmp/pardes-snap/tty/cwd Del
+| TTY /tmp/pardes-snap/tty/cwd Del NOR /tmp/pardes-snap/tty/cwd Del
| $ ls
| m.txt m.txt
| $
@@ -15,7 +15,7 @@
|
|
|
-| nm /tmp/pardes-snap/tty/cwd Del
+| NOR /tmp/pardes-snap/tty/cwd Del
|
| m.txt
|
@@ -31,7 +31,7 @@
|
== snap tty-echo grid=100x30 cursor=4,6
|Kill Newcol Tutor Debug Colors NextColor Dump
-| sy /tmp/pardes-snap/tty/cwd Del nm /tmp/pardes-snap/tty/cwd Del
+| TTY /tmp/pardes-snap/tty/cwd Del NOR /tmp/pardes-snap/tty/cwd Del
| $ ls
| m.txt m.txt
| $ echo SNAP''OK
@@ -46,7 +46,7 @@
|
|
|
-| nm /tmp/pardes-snap/tty/cwd Del
+| NOR /tmp/pardes-snap/tty/cwd Del
|
| m.txt
|
@@ -62,7 +62,7 @@
|
== snap tty-off grid=100x30 cursor=4,6
|Kill Newcol Tutor Debug Colors NextColor Dump
-| nm /tmp/pardes-snap/tty/cwd Del nm /tmp/pardes-snap/tty/cwd Del
+| NOR /tmp/pardes-snap/tty/cwd Del NOR /tmp/pardes-snap/tty/cwd Del
|
| m.txt m.txt
|
@@ -77,7 +77,7 @@
|
|
|
-| nm /tmp/pardes-snap/tty/cwd Del
+| NOR /tmp/pardes-snap/tty/cwd Del
|
| m.txt
|
diff --git a/test/snapshots/ttylook.golden b/test/snapshots/ttylook.golden
new file mode 100644
index 00000000..8465dbea
--- /dev/null
+++ b/test/snapshots/ttylook.golden
@@ -0,0 +1,279 @@
+== snap lsrow grid=120x30 cursor=2,2
+|Kill Newcol Tutor Debug Colors NextColor Dump
+| NOR /tmp/pardes-snap/ttylook/cwd/big.txt Save Del NOR /tmp/pardes-snap/ttylook/cwd Del
+| 1 line 1
+| 2 line 2 big.txt plain.txt sub
+| 3 line 3
+| 4 line 4
+| 5 line 5
+| 6 line 6
+| NOR /tmp/pardes-snap/ttylook/cwd Del
+|
+| plain.txt
+| big.txt:33
+| zz
+|
+| DONE
+|
+| NOR /tmp/pardes-snap/ttylook/cwd Del
+|
+| big.txt plain.txt sub
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+== style lsrow
+|0: 0-44 #969696,#2c2a3e, 45-119 d,#2c2a3e,
+|1: 0-1 d,#383c54, 2-50 #969696,#2c2a3e, 51-59 d,#2c2a3e, 60-61 d,#383c54, 62-97 #969696,#2c2a3e, 98-119 d,#2c2a3e,
+|2: 0-1 d,#525252, 2-6 #5a5a5a,d, 7-59 d,d, 60-61 d,#525252, 62-119 d,d,
+|3: 0-1 d,#2a2a2a, 2-6 #5a5a5a,d, 7-59 d,d, 60-61 d,#525252, 62-119 d,d,
+|4: 0-1 d,#2a2a2a, 2-6 #5a5a5a,d, 7-59 d,d, 60-61 d,#525252, 62-119 d,d,
+|5: 0-1 d,#2a2a2a, 2-6 #5a5a5a,d, 7-59 d,d, 60-61 d,#525252, 62-119 d,d,
+|6: 0-1 d,#2a2a2a, 2-6 #5a5a5a,d, 7-59 d,d, 60-61 d,#525252, 62-119 d,d,
+|7: 0-1 d,#2a2a2a, 2-6 #5a5a5a,d, 7-59 d,d, 60-61 d,#525252, 62-119 d,d,
+|8: 0-1 d,#6e4fd0, 2-37 #969696,#2c2a3e, 38-59 d,#2c2a3e, 60-61 d,#525252, 62-119 d,d,
+|9: 0-1 d,#2a2a2a, 2-59 d,d, 60-61 d,#525252, 62-119 d,d,
+|10: 0-1 d,#2a2a2a, 2-59 d,d, 60-61 d,#525252, 62-119 d,d,
+|11: 0-1 d,#2a2a2a, 2-59 d,d, 60-61 d,#525252, 62-119 d,d,
+|12: 0-1 d,#525252, 2-59 d,d, 60-61 d,#525252, 62-119 d,d,
+|13: 0-1 d,#525252, 2-59 d,d, 60-61 d,#525252, 62-119 d,d,
+|14: 0-1 d,#525252, 2-59 d,d, 60-61 d,#525252, 62-119 d,d,
+|15: 0-1 d,#2a2a2a, 2-59 d,d, 60-61 d,#525252, 62-119 d,d,
+|16: 0-1 d,#383c54, 2-37 #969696,#2c2a3e, 38-59 d,#2c2a3e, 60-61 d,#525252, 62-119 d,d,
+|17: 0-1 d,#525252, 2-59 d,d, 60-61 d,#525252, 62-119 d,d,
+|18: 0-1 d,#525252, 2-59 d,d, 60-61 d,#525252, 62-119 d,d,
+|19: 0-1 d,#525252, 2-59 d,d, 60-61 d,#525252, 62-119 d,d,
+|20: 0-1 d,#525252, 2-59 d,d, 60-61 d,#525252, 62-119 d,d,
+|21: 0-1 d,#525252, 2-59 d,d, 60-61 d,#525252, 62-119 d,d,
+|22: 0-1 d,#525252, 2-59 d,d, 60-61 d,#525252, 62-119 d,d,
+|23: 0-1 d,#525252, 2-59 d,d, 60-61 d,#525252, 62-119 d,d,
+|24: 0-1 d,#525252, 2-59 d,d, 60-61 d,#525252, 62-119 d,d,
+|25: 0-1 d,#525252, 2-59 d,d, 60-61 d,#525252, 62-119 d,d,
+|26: 0-1 d,#525252, 2-59 d,d, 60-61 d,#525252, 62-119 d,d,
+|27: 0-1 d,#525252, 2-59 d,d, 60-61 d,#525252, 62-119 d,d,
+|28: 0-1 d,#525252, 2-59 d,d, 60-61 d,#525252, 62-119 d,d,
+|29: 0-1 d,#525252, 2-59 d,d, 60-61 d,#525252, 62-119 d,d,
+== snap line20 grid=120x30 cursor=2,12
+|Kill Newcol Tutor Debug Colors NextColor Dump
+| NOR /tmp/pardes-snap/ttylook/cwd/big.txt Save Del NOR /tmp/pardes-snap/ttylook/cwd Del
+| 17 line 17
+| 18 line 18 big.txt plain.txt sub
+| 19 line 19
+| 20 line 20
+| 21 line 21
+| 22 line 22
+| NOR /tmp/pardes-snap/ttylook/cwd Del
+| big.txt plain.txt sub
+|
+| zz
+| big.txt:20
+| ww
+|
+| plain.txt
+| NOR /tmp/pardes-snap/ttylook/cwd Del
+|
+| big.txt plain.txt sub
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+== snap plain grid=120x30 cursor=2,12
+|Kill Newcol Tutor Debug Colors NextColor Dump
+| NOR /tmp/pardes-snap/ttylook/cwd/big.txt Save Del NOR /tmp/pardes-snap/ttylook/cwd Del
+| 17 line 17
+| 18 line 18 big.txt plain.txt sub
+| NOR /tmp/pardes-snap/ttylook/cwd/plain.txt Save Del
+| 1 just text
+|
+|
+| NOR /tmp/pardes-snap/ttylook/cwd Del
+| big.txt:20
+| ww
+|
+| plain.txt
+| big.txt:33
+| zz
+|
+| NOR /tmp/pardes-snap/ttylook/cwd Del
+|
+| big.txt plain.txt sub
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+== snap line33 grid=120x30 cursor=2,12
+|Kill Newcol Tutor Debug Colors NextColor Dump
+| NOR /tmp/pardes-snap/ttylook/cwd/big.txt Save Del NOR /tmp/pardes-snap/ttylook/cwd Del
+| 32 line 32
+| 33 line 33 big.txt plain.txt sub
+| NOR /tmp/pardes-snap/ttylook/cwd/plain.txt Save Del
+| 1 just text
+|
+|
+| NOR /tmp/pardes-snap/ttylook/cwd Del
+| ww
+|
+| plain.txt
+| big.txt:33
+| zz
+|
+| DONE
+| NOR /tmp/pardes-snap/ttylook/cwd Del
+|
+| big.txt plain.txt sub
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+== snap back grid=120x30 cursor=2,12
+|Kill Newcol Tutor Debug Colors NextColor Dump
+| NOR /tmp/pardes-snap/ttylook/cwd/big.txt Save Del NOR /tmp/pardes-snap/ttylook/cwd Del
+| 32 line 32
+| 33 line 33 big.txt plain.txt sub
+| NOR /tmp/pardes-snap/ttylook/cwd/plain.txt Save Del
+| 1 just text
+|
+|
+| NOR /tmp/pardes-snap/ttylook/cwd Del
+| big.txt:20
+| ww
+|
+| plain.txt
+| big.txt:33
+| zz
+|
+| NOR /tmp/pardes-snap/ttylook/cwd Del
+|
+| big.txt plain.txt sub
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+== style back
+|0: 0-44 #969696,#2c2a3e, 45-119 d,#2c2a3e,
+|1: 0-1 d,#383c54, 2-50 #969696,#2c2a3e, 51-59 d,#2c2a3e, 60-61 d,#383c54, 62-97 #969696,#2c2a3e, 98-119 d,#2c2a3e,
+|2: 0-1 d,#2a2a2a, 2-6 #5a5a5a,d, 7-59 d,d, 60-61 d,#525252, 62-119 d,d,
+|3: 0-1 d,#525252, 2-6 #5a5a5a,d, 7-59 d,d, 60-61 d,#525252, 62-119 d,d,
+|4: 0-1 d,#383c54, 2-52 #969696,#2c2a3e, 53-59 d,#2c2a3e, 60-61 d,#525252, 62-119 d,d,
+|5: 0-1 d,#525252, 2-6 #5a5a5a,d, 7-59 d,d, 60-61 d,#525252, 62-119 d,d,
+|6: 0-1 d,#525252, 2-6 #5a5a5a,d, 7-59 d,d, 60-61 d,#525252, 62-119 d,d,
+|7: 0-1 d,#525252, 2-6 #5a5a5a,d, 7-59 d,d, 60-61 d,#525252, 62-119 d,d,
+|8: 0-1 d,#6e4fd0, 2-37 #969696,#2c2a3e, 38-59 d,#2c2a3e, 60-61 d,#525252, 62-119 d,d,
+|9: 0-1 d,#2a2a2a, 2-59 d,d, 60-61 d,#525252, 62-119 d,d,
+|10: 0-1 d,#2a2a2a, 2-59 d,d, 60-61 d,#525252, 62-119 d,d,
+|11: 0-1 d,#525252, 2-59 d,d, 60-61 d,#525252, 62-119 d,d,
+|12: 0-1 d,#525252, 2-59 #d8c8a8,#4a3a1e, 60-61 d,#525252, 62-119 d,d,
+|13: 0-1 d,#525252, 2-59 d,d, 60-61 d,#525252, 62-119 d,d,
+|14: 0-1 d,#2a2a2a, 2-59 d,d, 60-61 d,#525252, 62-119 d,d,
+|15: 0-1 d,#2a2a2a, 2-59 d,d, 60-61 d,#525252, 62-119 d,d,
+|16: 0-1 d,#383c54, 2-37 #969696,#2c2a3e, 38-59 d,#2c2a3e, 60-61 d,#525252, 62-119 d,d,
+|17: 0-1 d,#525252, 2-59 d,d, 60-61 d,#525252, 62-119 d,d,
+|18: 0-1 d,#525252, 2-59 d,d, 60-61 d,#525252, 62-119 d,d,
+|19: 0-1 d,#525252, 2-59 d,d, 60-61 d,#525252, 62-119 d,d,
+|20: 0-1 d,#525252, 2-59 d,d, 60-61 d,#525252, 62-119 d,d,
+|21: 0-1 d,#525252, 2-59 d,d, 60-61 d,#525252, 62-119 d,d,
+|22: 0-1 d,#525252, 2-59 d,d, 60-61 d,#525252, 62-119 d,d,
+|23: 0-1 d,#525252, 2-59 d,d, 60-61 d,#525252, 62-119 d,d,
+|24: 0-1 d,#525252, 2-59 d,d, 60-61 d,#525252, 62-119 d,d,
+|25: 0-1 d,#525252, 2-59 d,d, 60-61 d,#525252, 62-119 d,d,
+|26: 0-1 d,#525252, 2-59 d,d, 60-61 d,#525252, 62-119 d,d,
+|27: 0-1 d,#525252, 2-59 d,d, 60-61 d,#525252, 62-119 d,d,
+|28: 0-1 d,#525252, 2-59 d,d, 60-61 d,#525252, 62-119 d,d,
+|29: 0-1 d,#525252, 2-59 d,d, 60-61 d,#525252, 62-119 d,d,
+== snap insert grid=120x30 cursor=2,12
+|Kill Newcol Tutor Debug Colors NextColor Dump
+| NOR /tmp/pardes-snap/ttylook/cwd/big.txt Save Del NOR /tmp/pardes-snap/ttylook/cwd Del
+| 32 line 32
+| 33 line 33 big.txt plain.txt sub
+| NOR /tmp/pardes-snap/ttylook/cwd/plain.txt Save Del
+| 1 just text
+|
+|
+| NOR /tmp/pardes-snap/ttylook/cwd Del
+| big.txt:20
+| ww
+|
+| nnplain.txt
+| big.txt:33
+| zz
+|
+| NOR /tmp/pardes-snap/ttylook/cwd Del
+|
+| big.txt plain.txt sub
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+== snap noop grid=120x30 cursor=2,13
+|Kill Newcol Tutor Debug Colors NextColor Dump
+| NOR /tmp/pardes-snap/ttylook/cwd/big.txt Save Del NOR /tmp/pardes-snap/ttylook/cwd Del
+| 32 line 32
+| 33 line 33 big.txt plain.txt sub
+| NOR /tmp/pardes-snap/ttylook/cwd/plain.txt Save Del
+| 1 just text
+|
+|
+| NOR /tmp/pardes-snap/ttylook/cwd Del
+|
+| DONE
+|
+| NOR /tmp/pardes-snap/ttylook/cwd/sub Del
+|
+| big.txt plain.txt sub
+|
+| NOR /tmp/pardes-snap/ttylook/cwd Del
+|
+| big.txt plain.txt sub
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
+|
diff --git a/test/snapshots/ttylook.snap b/test/snapshots/ttylook.snap
new file mode 100644
index 00000000..648dcd42
--- /dev/null
+++ b/test/snapshots/ttylook.snap
@@ -0,0 +1,77 @@
+# tty n/N look-motion (normal mode only): n selects the next output row of
+# the terminal whose leading file-ish word looks somewhere (file, path:NNN —
+# resolved by the look machinery, prompt/echo rows blanked via the OSC 133
+# marks) and looks it; plain rows are skipped; N steps back up. Insert-mode
+# n still types (run splice); with nothing lookable n is a no-op.
+lines big.txt 40
+file plain.txt just text
+dirmk sub
+start 30 120
+wait 8000 big.txt
+stable 700 20000
+# real shell output mixing lookable and plain rows (two short printfs so the
+# echoes never wrap; echo rows are prompt-marked and invisible to the walk)
+key c-b
+stable 600 8000
+text printf 'zz\nbig.txt:20\nww\n'
+key enter
+text printf 'plain.txt\nbig.txt:33\nzz\n'
+key enter
+text echo DO''NE
+key enter
+wait 8000 DONE
+stable 700 15000
+key c-b
+stable 600 8000
+# from the top: n skips nothing-rows, lands on the ls row (big.txt ...) first
+key g g
+stable 400 5000
+key n
+stable 700 15000
+snap lsrow
+snapstyle lsrow
+# next hits: big.txt:20 (file pane scrolls there), plain.txt, big.txt:33
+key n
+stable 700 15000
+snap line20
+key n
+stable 700 15000
+snap plain
+key n
+stable 700 15000
+snap line33
+# N walks back up to the plain.txt row
+key N
+stable 700 15000
+snap back
+snapstyle back
+# insert mode: n types (a run splice), it does not step
+key i
+text nn
+key esc
+settle 700
+stable 400 5000
+snap insert
+key u
+stable 400 5000
+# a shell with nothing lookable: cd into the empty subdir (the old ls row no
+# longer resolves from there), print plain rows — n has nowhere to go
+key a-n
+stable 700 15000
+key c-b
+stable 600 8000
+text cd sub
+key enter
+text printf 'qq\nrr\n'
+key enter
+text echo O''VER
+key enter
+wait 8000 OVER
+stable 700 15000
+key c-b
+stable 600 8000
+key g g
+stable 400 5000
+key n
+stable 400 5000
+snap noop
diff --git a/test/snapshots/ttyonly.golden b/test/snapshots/ttyonly.golden
index 20ddf792..f8722061 100644
--- a/test/snapshots/ttyonly.golden
+++ b/test/snapshots/ttyonly.golden
@@ -1,6 +1,6 @@
== snap ttyonly grid=100x30 cursor=4,4
|Kill Newcol Tutor Debug Colors NextColor Dump
-| sy /tmp/pardes-snap/ttyonly/cwd Del
+| TTY /tmp/pardes-snap/ttyonly/cwd Del
| $ echo TTY''ONLY
| TTYONLY
| $
@@ -31,7 +31,7 @@
|
== style ttyonly
|0: 0-44 #969696,#2c2a3e, 45-99 d,#2c2a3e,
-|1: 0-1 d,#6e4fd0, 2-36 #969696,#2c2a3e, 37-99 d,#2c2a3e,
+|1: 0-1 d,#6e4fd0, 2-37 #969696,#2c2a3e, 38-99 d,#2c2a3e,
|2: 0-1 d,#525252, 2-99 d,d,
|3: 0-1 d,#525252, 2-99 d,d,
|4: 0-1 d,#525252, 2-99 d,d,
diff --git a/test/snapshots/tutor.golden b/test/snapshots/tutor.golden
index 55d66c9b..d4c5d644 100644
--- a/test/snapshots/tutor.golden
+++ b/test/snapshots/tutor.golden
@@ -1,16 +1,13 @@
== snap tutor grid=100x30 cursor=7,2
|Kill Newcol Tutor Debug Colors NextColor Dump
-| nm /Tutor Save Del nm /tmp/pardes-snap/tutor/cwd Del
+| NOR /Tutor Save Del NOR /tmp/pardes-snap/tutor/cwd Del
| 1
| 2 PARDES TUTOR
| 3 tmux + vi + acme, from
| 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
+| NOR /tmp/pardes-snap/tutor/cwd Del
|
|
|
@@ -18,9 +15,12 @@
|
|
|
+| NOR /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..a7750e33 100644
--- a/test/snapshots/windowops.golden
+++ b/test/snapshots/windowops.golden
@@ -1,6 +1,6 @@
== snap hover-v grid=100x30 cursor=4,4
|Kill Newcol Tutor Debug Colors NextColor Dump
-| nm /tmp/pardes-snap/windowops/cwd Del ╎ nm /tmp/pardes-snap/windowops/cwd Del
+| NOR /tmp/pardes-snap/windowops/cwd Del ╎ NOR /tmp/pardes-snap/windowops/cwd Del
| ╎
| w.txt ╎ w.txt
| ╎
@@ -15,7 +15,7 @@
| ╎
| ╎
| ╎
-| nm /tmp/pardes-snap/windowops/cwd Del ╎
+| NOR /tmp/pardes-snap/windowops/cwd Del ╎
| ╎
| w.txt ╎
| ╎
@@ -31,7 +31,7 @@
| ╎
== snap hover-h grid=100x30 cursor=4,4
|Kill Newcol Tutor Debug Colors NextColor Dump
-| nm /tmp/pardes-snap/windowops/cwd Del nm /tmp/pardes-snap/windowops/cwd Del
+| NOR /tmp/pardes-snap/windowops/cwd Del NOR /tmp/pardes-snap/windowops/cwd Del
|
| w.txt w.txt
|
@@ -46,7 +46,7 @@
|
|
|╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌
-| nm /tmp/pardes-snap/windowops/cwd Del
+| NOR /tmp/pardes-snap/windowops/cwd Del
|
| w.txt
|
@@ -62,7 +62,7 @@
|
== snap border-drag grid=100x30 cursor=4,4
|Kill Newcol Tutor Debug Colors NextColor Dump
-| nm /tmp/pardes-snap/windowops/cwd Del╎ nm /tmp/pardes-snap/windowops/cwd Del
+| NOR /tmp/pardes-snap/windowops/cwd De╎ NOR /tmp/pardes-snap/windowops/cwd Del
| ╎
| w.txt ╎ w.txt
| ╎
@@ -77,7 +77,7 @@
| ╎
| ╎
| ╎
-| nm /tmp/pardes-snap/windowops/cwd Del╎
+| NOR /tmp/pardes-snap/windowops/cwd De╎
| ╎
| w.txt ╎
| ╎
@@ -93,7 +93,7 @@
| ╎
== snap border-done grid=100x30 cursor=4,4
|Kill Newcol Tutor Debug Colors NextColor Dump
-| nm /tmp/pardes-snap/windowops/cwd Del╎ nm /tmp/pardes-snap/windowops/cwd Del
+| NOR /tmp/pardes-snap/windowops/cwd De╎ NOR /tmp/pardes-snap/windowops/cwd Del
| ╎
| w.txt ╎ w.txt
| ╎
@@ -108,7 +108,7 @@
| ╎
| ╎
| ╎
-| nm /tmp/pardes-snap/windowops/cwd Del╎
+| NOR /tmp/pardes-snap/windowops/cwd De╎
| ╎
| w.txt ╎
| ╎
@@ -124,7 +124,7 @@
| ╎
== snap hborder-done grid=100x30 cursor=4,4
|Kill Newcol Tutor Debug Colors NextColor Dump
-| nm /tmp/pardes-snap/windowops/cwd Del nm /tmp/pardes-snap/windowops/cwd Del
+| NOR /tmp/pardes-snap/windowops/cwd Del NOR /tmp/pardes-snap/windowops/cwd Del
|
| w.txt w.txt
|
@@ -135,7 +135,7 @@
|
|
|╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌
-| nm /tmp/pardes-snap/windowops/cwd Del
+| NOR /tmp/pardes-snap/windowops/cwd Del
|
| w.txt
|
@@ -155,7 +155,7 @@
|
== snap move-preview grid=100x30 cursor=4,15
|Kill Newcol Tutor Debug Colors NextColor Dump
-| nm /tmp/pardes-snap/windowops/cwd Del nm /tmp/pardes-snap/windowops/cwd Del
+| NOR /tmp/pardes-snap/windowops/cwd Del NOR /tmp/pardes-snap/windowops/cwd Del
|
| w.txt w.txt
|
@@ -166,7 +166,7 @@
|
|
|
-| nm /tmp/pardes-snap/windowops/cwd Del
+| NOR /tmp/pardes-snap/windowops/cwd Del
|
| w.txt
|
@@ -186,7 +186,7 @@
|
== snap moved grid=100x30 cursor=4,15
|Kill Newcol Tutor Debug Colors NextColor Dump
-| nm /tmp/pardes-snap/windowops/cwd Del nm /tmp/pardes-snap/windowops/cwd Del
+| NOR /tmp/pardes-snap/windowops/cwd Del NOR /tmp/pardes-snap/windowops/cwd Del
|
| w.txt w.txt
|
@@ -197,7 +197,7 @@
|
|
|
-| nm /tmp/pardes-snap/windowops/cwd Del
+| NOR /tmp/pardes-snap/windowops/cwd Del
|
| w.txt
|
@@ -215,30 +215,30 @@
|
|
|
-== 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
+| NOR /tmp/pardes-snap/windowops/cwd Del NOR /tmp/pardes-snap/windowops/cwd Del
|
| w.txt w.txt
|
|
|
|
-| nm /tmp/pardes-snap/windowops/cwd Del
|
-| w.txt
|
|
|
+| NOR /tmp/pardes-snap/windowops/cwd Del
|
+| w.txt
|
+| NOR /tmp/pardes-snap/windowops/cwd Del
|
+| w.txt
|
|
|
-| nm /tmp/pardes-snap/windowops/cwd Del
|
-| w.txt
|
|
|
@@ -246,30 +246,30 @@
|
|
|
-== 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
+| NOR /tmp/pardes-snap/windowops/cwd Del NOR /tmp/pardes-snap/windowops/cwd Del
|
| w.txt w.txt
|
|
|
|
-| nm /tmp/pardes-snap/windowops/cwd Del
|
-| w.txt
|
|
|
+| NOR /tmp/pardes-snap/windowops/cwd Del
|
+| w.txt
|
+| NOR /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╭────────────────────────────╮
+| NOR /tmp/pardes-snap/windowops/cwd Del NOR /tmp/pardes-snap/windowo╭────────────────────────────╮
| │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
+| ╰────────────────────────────╯
|
|
|
+| NOR /tmp/pardes-snap/windowops/cwd Del
|
+| w.txt
|
+| NOR /tmp/pardes-snap/windowops/cwd Del
|
+| w.txt
|
|
|
-| nm /tmp/pardes-snap/windowops/cwd Del
|
-| w.txt
|
|
|
@@ -310,26 +310,26 @@
|
== style debug-on
|0: 0-44 #969696,#2c2a3e, 45-99 d,#2c2a3e,
-|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,
+|1: 0-1 d,#383c54, 2-39 #969696,#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-39 #969696,#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-39 #969696,#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,30 +339,30 @@
|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
+| NOR /tmp/pardes-snap/windowops/cwd Del NOR /tmp/pardes-snap/windowops/cwd Del
|
| w.txt w.txt
|
|
|
|
-| nm /tmp/pardes-snap/windowops/cwd Del
|
-| w.txt
|
|
|
+| NOR /tmp/pardes-snap/windowops/cwd Del
|
+| w.txt
|
+| NOR /tmp/pardes-snap/windowops/cwd Del
|
+| w.txt
|
|
|
-| nm /tmp/pardes-snap/windowops/cwd Del
|
-| w.txt
|
|
|