diff options
| author | Gabriel Schneider <[email protected]> | 2026-07-31 05:04:26 -0300 |
|---|---|---|
| committer | Gabriel Schneider <[email protected]> | 2026-08-01 15:02:08 -0300 |
| commit | 5bf8d6dd077517270377e5d8551108ecf252374f (patch) | |
| tree | c7783fa9fc133980d3d6fff0129e8de5a1b43601 /test/snapshots/selregex.golden | |
| parent | eefac04995ffad847a4098f16d2e82ccab16438b (diff) | |
| download | pardes-5bf8d6dd077517270377e5d8551108ecf252374f.tar.gz pardes-5bf8d6dd077517270377e5d8551108ecf252374f.zip | |
multiple cursors, regex selection, and Ctrl-c comments
The primary cursor stays exactly where it was — cur_row/cur_col plus vsel — and
sels[] holds helix's OTHER ranges. That split is why nothing moved at one
cursor: with nsel == 0 not one line of the existing motion, operator, render or
mouse code takes a different branch, which is what protects 800 differential
cases and 67 goldens.
paneRanges/setPaneRanges are the whole list; setPaneRanges IS helix's
Selection::new (min width 1, sorted, overlaps merged, primary follows its range
through a merge). An ordinary key runs the single-selection handler once per
range, visited last-first so an edit never disturbs a range still waiting, and
each finished pass is remembered as a distance from the END of the text, which
an earlier edit cannot move — helix's change mapping without a change map.
pushUndo fires once per keystroke, yanks accumulate, and a builtin acts from
the primary and stops the replay, which also closes the use-after-free window
if it frees the pane.
s and S reuse the / prompt wholesale rather than growing a second one: the
pattern is typed into the tag tail, and every keystroke re-runs the match from
the selection the prompt opened on, so the preview is live and Esc is just the
empty pattern. mvzr does runtime patterns — a bytecode VM in a fixed-size
struct with no allocator — with 64 ops and 8 char classes per pattern, no
case-insensitive flag (helix's smart case is done by folding a scratch copy),
no captures, no multi-line anchors. The last two are the two waivers.
Ctrl-c is a whole-list key and not a per-cursor replay, because helix decides
comment-vs-uncomment ONCE for the whole selection; replaying it would take that
decision n times. Comment tokens are a table in config.zig keyed on the same
extension syntax.zig picks grammars by.
Found and fixed a pre-existing single-cursor bug on the way: la<bs><esc> left
the cursor one cell before where the append began. helix's restore_cursor can
never walk past the origin; ours backed up unconditionally. hxdiff was green
before AND after — the old one-selection contract could not see it.
hxdiff 360 -> 481 cases, hxparity 440 -> 561, all goldens from real helix; the
harness contract now reports every range and its primary, omitted when there is
one, so 359 of the 360 old goldens are byte-identical. The one that moved is
o-count: helix's 2o really does leave two cursors and could not say so before.
Diffstat (limited to 'test/snapshots/selregex.golden')
| -rw-r--r-- | test/snapshots/selregex.golden | 275 |
1 files changed, 275 insertions, 0 deletions
diff --git a/test/snapshots/selregex.golden b/test/snapshots/selregex.golden new file mode 100644 index 00000000..9a1d58d6 --- /dev/null +++ b/test/snapshots/selregex.golden @@ -0,0 +1,275 @@ +== snap prompt-armed grid=160x24 cursor=59,1 +|Kill Newcol Tutor Debug NextColor Dump Find Grep Help +| INS /tmp/pardes-snap/selregex/cwd/m.zig Save Del Select / NOR /tmp/pardes-snap/selregex/cwd Del +| 1 const one = 1; +| 2 const two = 2; m.zig +| 3 const three = 3; +| 4 +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +== snap preview grid=160x24 cursor=64,1 +|Kill Newcol Tutor Debug NextColor Dump Find Grep Help +| INS /tmp/pardes-snap/selregex/cwd/m.zig Save Del Select /const NOR /tmp/pardes-snap/selregex/cwd Del +| 1 const one = 1; +| 2 const two = 2; m.zig +| 3 const three = 3; +| 4 +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +== style preview +|0: 0-52 #949494,#121212, 53-159 d,#121212, +|1: 0-1 d,#626262, 2-63 #949494,#121212, 64-79 d,#121212, 80-81 d,#262626, 82-118 #949494,#121212, 119-159 d,#121212, +|2: 0-1 d,#444444, 2-6 #626262,#080808, 7-10 #d8c8a8,#4a3a1e, 11-11 #4a3a1e,#d8c8a8, 12-18 #bdbdbd,#080808, 19-19 #e3c78a,#080808, 20-20 #bdbdbd,#080808, 21-79 d,#080808, 80-81 d,#444444, 82-159 #bdbdbd,#080808, +|3: 0-1 d,#444444, 2-6 #626262,#080808, 7-10 #a89c84,#2e2616, 11-11 #4a3a1e,#d8c8a8, 12-18 #bdbdbd,#080808, 19-19 #e3c78a,#080808, 20-20 #bdbdbd,#080808, 21-79 d,#080808, 80-81 d,#444444, 82-159 #bdbdbd,#080808, +|4: 0-1 d,#444444, 2-6 #626262,#080808, 7-10 #a89c84,#2e2616, 11-11 #4a3a1e,#d8c8a8, 12-20 #bdbdbd,#080808, 21-21 #e3c78a,#080808, 22-22 #bdbdbd,#080808, 23-79 d,#080808, 80-81 d,#444444, 82-159 #bdbdbd,#080808, +|5: 0-1 d,#444444, 2-6 #626262,#080808, 7-79 d,#080808, 80-81 d,#444444, 82-159 #bdbdbd,#080808, +|6: 0-1 d,#444444, 2-6 #626262,#080808, 7-79 d,#080808, 80-81 d,#444444, 82-159 #bdbdbd,#080808, +|7: 0-1 d,#444444, 2-6 #626262,#080808, 7-79 d,#080808, 80-81 d,#444444, 82-159 #bdbdbd,#080808, +|8: 0-1 d,#444444, 2-6 #626262,#080808, 7-79 d,#080808, 80-81 d,#444444, 82-159 #bdbdbd,#080808, +|9: 0-1 d,#444444, 2-6 #626262,#080808, 7-79 d,#080808, 80-81 d,#444444, 82-159 #bdbdbd,#080808, +|10: 0-1 d,#444444, 2-6 #626262,#080808, 7-79 d,#080808, 80-81 d,#444444, 82-159 #bdbdbd,#080808, +|11: 0-1 d,#444444, 2-6 #626262,#080808, 7-79 d,#080808, 80-81 d,#444444, 82-159 #bdbdbd,#080808, +|12: 0-1 d,#444444, 2-6 #626262,#080808, 7-79 d,#080808, 80-81 d,#444444, 82-159 #bdbdbd,#080808, +|13: 0-1 d,#444444, 2-6 #626262,#080808, 7-79 d,#080808, 80-81 d,#444444, 82-159 #bdbdbd,#080808, +|14: 0-1 d,#444444, 2-6 #626262,#080808, 7-79 d,#080808, 80-81 d,#444444, 82-159 #bdbdbd,#080808, +|15: 0-1 d,#444444, 2-6 #626262,#080808, 7-79 d,#080808, 80-81 d,#444444, 82-159 #bdbdbd,#080808, +|16: 0-1 d,#444444, 2-6 #626262,#080808, 7-79 d,#080808, 80-81 d,#444444, 82-159 #bdbdbd,#080808, +|17: 0-1 d,#444444, 2-6 #626262,#080808, 7-79 d,#080808, 80-81 d,#444444, 82-159 #bdbdbd,#080808, +|18: 0-1 d,#444444, 2-6 #626262,#080808, 7-79 d,#080808, 80-81 d,#444444, 82-159 #bdbdbd,#080808, +|19: 0-1 d,#444444, 2-6 #626262,#080808, 7-79 d,#080808, 80-81 d,#444444, 82-159 #bdbdbd,#080808, +|20: 0-1 d,#444444, 2-6 #626262,#080808, 7-79 d,#080808, 80-81 d,#444444, 82-159 #bdbdbd,#080808, +|21: 0-1 d,#444444, 2-6 #626262,#080808, 7-79 d,#080808, 80-81 d,#444444, 82-159 #bdbdbd,#080808, +|22: 0-1 d,#444444, 2-6 #626262,#080808, 7-79 d,#080808, 80-81 d,#444444, 82-159 #bdbdbd,#080808, +|23: 0-1 d,#444444, 2-6 #626262,#080808, 7-79 d,#080808, 80-81 d,#444444, 82-159 #bdbdbd,#080808, +== snap three-selected grid=160x24 cursor=11,2 +|Kill Newcol Tutor Debug NextColor Dump Find Grep Help +| NOR /tmp/pardes-snap/selregex/cwd/m.zig Save Del NOR /tmp/pardes-snap/selregex/cwd Del +| 1 const one = 1; +| 2 const two = 2; m.zig +| 3 const three = 3; +| 4 +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +== style three-selected +|0: 0-52 #949494,#121212, 53-159 d,#121212, +|1: 0-1 d,#626262, 2-49 #949494,#121212, 50-79 d,#121212, 80-81 d,#262626, 82-118 #949494,#121212, 119-159 d,#121212, +|2: 0-1 d,#444444, 2-6 #949494,#121212, 7-11 #d8c8a8,#4a3a1e, 12-18 #bdbdbd,#080808, 19-19 #e3c78a,#080808, 20-20 #bdbdbd,#080808, 21-79 d,#080808, 80-81 d,#444444, 82-159 #bdbdbd,#080808, +|3: 0-1 d,#444444, 2-6 #626262,#080808, 7-10 #a89c84,#2e2616, 11-11 #4a3a1e,#d8c8a8, 12-18 #bdbdbd,#080808, 19-19 #e3c78a,#080808, 20-20 #bdbdbd,#080808, 21-79 d,#080808, 80-81 d,#444444, 82-159 #bdbdbd,#080808, +|4: 0-1 d,#444444, 2-6 #626262,#080808, 7-10 #a89c84,#2e2616, 11-11 #4a3a1e,#d8c8a8, 12-20 #bdbdbd,#080808, 21-21 #e3c78a,#080808, 22-22 #bdbdbd,#080808, 23-79 d,#080808, 80-81 d,#444444, 82-159 #bdbdbd,#080808, +|5: 0-1 d,#444444, 2-6 #626262,#080808, 7-79 d,#080808, 80-81 d,#444444, 82-159 #bdbdbd,#080808, +|6: 0-1 d,#444444, 2-6 #626262,#080808, 7-79 d,#080808, 80-81 d,#444444, 82-159 #bdbdbd,#080808, +|7: 0-1 d,#444444, 2-6 #626262,#080808, 7-79 d,#080808, 80-81 d,#444444, 82-159 #bdbdbd,#080808, +|8: 0-1 d,#444444, 2-6 #626262,#080808, 7-79 d,#080808, 80-81 d,#444444, 82-159 #bdbdbd,#080808, +|9: 0-1 d,#444444, 2-6 #626262,#080808, 7-79 d,#080808, 80-81 d,#444444, 82-159 #bdbdbd,#080808, +|10: 0-1 d,#444444, 2-6 #626262,#080808, 7-79 d,#080808, 80-81 d,#444444, 82-159 #bdbdbd,#080808, +|11: 0-1 d,#444444, 2-6 #626262,#080808, 7-79 d,#080808, 80-81 d,#444444, 82-159 #bdbdbd,#080808, +|12: 0-1 d,#444444, 2-6 #626262,#080808, 7-79 d,#080808, 80-81 d,#444444, 82-159 #bdbdbd,#080808, +|13: 0-1 d,#444444, 2-6 #626262,#080808, 7-79 d,#080808, 80-81 d,#444444, 82-159 #bdbdbd,#080808, +|14: 0-1 d,#444444, 2-6 #626262,#080808, 7-79 d,#080808, 80-81 d,#444444, 82-159 #bdbdbd,#080808, +|15: 0-1 d,#444444, 2-6 #626262,#080808, 7-79 d,#080808, 80-81 d,#444444, 82-159 #bdbdbd,#080808, +|16: 0-1 d,#444444, 2-6 #626262,#080808, 7-79 d,#080808, 80-81 d,#444444, 82-159 #bdbdbd,#080808, +|17: 0-1 d,#444444, 2-6 #626262,#080808, 7-79 d,#080808, 80-81 d,#444444, 82-159 #bdbdbd,#080808, +|18: 0-1 d,#444444, 2-6 #626262,#080808, 7-79 d,#080808, 80-81 d,#444444, 82-159 #bdbdbd,#080808, +|19: 0-1 d,#444444, 2-6 #626262,#080808, 7-79 d,#080808, 80-81 d,#444444, 82-159 #bdbdbd,#080808, +|20: 0-1 d,#444444, 2-6 #626262,#080808, 7-79 d,#080808, 80-81 d,#444444, 82-159 #bdbdbd,#080808, +|21: 0-1 d,#444444, 2-6 #626262,#080808, 7-79 d,#080808, 80-81 d,#444444, 82-159 #bdbdbd,#080808, +|22: 0-1 d,#444444, 2-6 #626262,#080808, 7-79 d,#080808, 80-81 d,#444444, 82-159 #bdbdbd,#080808, +|23: 0-1 d,#444444, 2-6 #626262,#080808, 7-79 d,#080808, 80-81 d,#444444, 82-159 #bdbdbd,#080808, +== snap narrowed grid=160x24 cursor=60,1 +|Kill Newcol Tutor Debug NextColor Dump Find Grep Help +| INS /tmp/pardes-snap/selregex/cwd/m.zig Save Del Select /t NOR /tmp/pardes-snap/selregex/cwd Del +| 1 const one = 1; +| 2 const two = 2; m.zig +| 3 const three = 3; +| 4 +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +== style narrowed +|0: 0-52 #949494,#121212, 53-159 d,#121212, +|1: 0-1 d,#626262, 2-59 #949494,#121212, 60-79 d,#121212, 80-81 d,#262626, 82-118 #949494,#121212, 119-159 d,#121212, +|2: 0-1 d,#444444, 2-6 #626262,#080808, 7-10 #bdbdbd,#080808, 11-11 #4a3a1e,#d8c8a8, 12-18 #bdbdbd,#080808, 19-19 #e3c78a,#080808, 20-20 #bdbdbd,#080808, 21-79 d,#080808, 80-81 d,#444444, 82-159 #bdbdbd,#080808, +|3: 0-1 d,#444444, 2-6 #626262,#080808, 7-10 #bdbdbd,#080808, 11-11 #4a3a1e,#d8c8a8, 12-18 #bdbdbd,#080808, 19-19 #e3c78a,#080808, 20-20 #bdbdbd,#080808, 21-79 d,#080808, 80-81 d,#444444, 82-159 #bdbdbd,#080808, +|4: 0-1 d,#444444, 2-6 #626262,#080808, 7-10 #bdbdbd,#080808, 11-11 #4a3a1e,#d8c8a8, 12-20 #bdbdbd,#080808, 21-21 #e3c78a,#080808, 22-22 #bdbdbd,#080808, 23-79 d,#080808, 80-81 d,#444444, 82-159 #bdbdbd,#080808, +|5: 0-1 d,#444444, 2-6 #626262,#080808, 7-79 d,#080808, 80-81 d,#444444, 82-159 #bdbdbd,#080808, +|6: 0-1 d,#444444, 2-6 #626262,#080808, 7-79 d,#080808, 80-81 d,#444444, 82-159 #bdbdbd,#080808, +|7: 0-1 d,#444444, 2-6 #626262,#080808, 7-79 d,#080808, 80-81 d,#444444, 82-159 #bdbdbd,#080808, +|8: 0-1 d,#444444, 2-6 #626262,#080808, 7-79 d,#080808, 80-81 d,#444444, 82-159 #bdbdbd,#080808, +|9: 0-1 d,#444444, 2-6 #626262,#080808, 7-79 d,#080808, 80-81 d,#444444, 82-159 #bdbdbd,#080808, +|10: 0-1 d,#444444, 2-6 #626262,#080808, 7-79 d,#080808, 80-81 d,#444444, 82-159 #bdbdbd,#080808, +|11: 0-1 d,#444444, 2-6 #626262,#080808, 7-79 d,#080808, 80-81 d,#444444, 82-159 #bdbdbd,#080808, +|12: 0-1 d,#444444, 2-6 #626262,#080808, 7-79 d,#080808, 80-81 d,#444444, 82-159 #bdbdbd,#080808, +|13: 0-1 d,#444444, 2-6 #626262,#080808, 7-79 d,#080808, 80-81 d,#444444, 82-159 #bdbdbd,#080808, +|14: 0-1 d,#444444, 2-6 #626262,#080808, 7-79 d,#080808, 80-81 d,#444444, 82-159 #bdbdbd,#080808, +|15: 0-1 d,#444444, 2-6 #626262,#080808, 7-79 d,#080808, 80-81 d,#444444, 82-159 #bdbdbd,#080808, +|16: 0-1 d,#444444, 2-6 #626262,#080808, 7-79 d,#080808, 80-81 d,#444444, 82-159 #bdbdbd,#080808, +|17: 0-1 d,#444444, 2-6 #626262,#080808, 7-79 d,#080808, 80-81 d,#444444, 82-159 #bdbdbd,#080808, +|18: 0-1 d,#444444, 2-6 #626262,#080808, 7-79 d,#080808, 80-81 d,#444444, 82-159 #bdbdbd,#080808, +|19: 0-1 d,#444444, 2-6 #626262,#080808, 7-79 d,#080808, 80-81 d,#444444, 82-159 #bdbdbd,#080808, +|20: 0-1 d,#444444, 2-6 #626262,#080808, 7-79 d,#080808, 80-81 d,#444444, 82-159 #bdbdbd,#080808, +|21: 0-1 d,#444444, 2-6 #626262,#080808, 7-79 d,#080808, 80-81 d,#444444, 82-159 #bdbdbd,#080808, +|22: 0-1 d,#444444, 2-6 #626262,#080808, 7-79 d,#080808, 80-81 d,#444444, 82-159 #bdbdbd,#080808, +|23: 0-1 d,#444444, 2-6 #626262,#080808, 7-79 d,#080808, 80-81 d,#444444, 82-159 #bdbdbd,#080808, +== snap esc-restores grid=160x24 cursor=11,2 +|Kill Newcol Tutor Debug NextColor Dump Find Grep Help +| NOR /tmp/pardes-snap/selregex/cwd/m.zig Save Del NOR /tmp/pardes-snap/selregex/cwd Del +| 1 const one = 1; +| 2 const two = 2; m.zig +| 3 const three = 3; +| 4 +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +== style esc-restores +|0: 0-52 #949494,#121212, 53-159 d,#121212, +|1: 0-1 d,#626262, 2-49 #949494,#121212, 50-79 d,#121212, 80-81 d,#262626, 82-118 #949494,#121212, 119-159 d,#121212, +|2: 0-1 d,#444444, 2-6 #949494,#121212, 7-11 #d8c8a8,#4a3a1e, 12-18 #bdbdbd,#080808, 19-19 #e3c78a,#080808, 20-20 #bdbdbd,#080808, 21-79 d,#080808, 80-81 d,#444444, 82-159 #bdbdbd,#080808, +|3: 0-1 d,#444444, 2-6 #626262,#080808, 7-10 #a89c84,#2e2616, 11-11 #4a3a1e,#d8c8a8, 12-18 #bdbdbd,#080808, 19-19 #e3c78a,#080808, 20-20 #bdbdbd,#080808, 21-79 d,#080808, 80-81 d,#444444, 82-159 #bdbdbd,#080808, +|4: 0-1 d,#444444, 2-6 #626262,#080808, 7-10 #a89c84,#2e2616, 11-11 #4a3a1e,#d8c8a8, 12-20 #bdbdbd,#080808, 21-21 #e3c78a,#080808, 22-22 #bdbdbd,#080808, 23-79 d,#080808, 80-81 d,#444444, 82-159 #bdbdbd,#080808, +|5: 0-1 d,#444444, 2-6 #626262,#080808, 7-79 d,#080808, 80-81 d,#444444, 82-159 #bdbdbd,#080808, +|6: 0-1 d,#444444, 2-6 #626262,#080808, 7-79 d,#080808, 80-81 d,#444444, 82-159 #bdbdbd,#080808, +|7: 0-1 d,#444444, 2-6 #626262,#080808, 7-79 d,#080808, 80-81 d,#444444, 82-159 #bdbdbd,#080808, +|8: 0-1 d,#444444, 2-6 #626262,#080808, 7-79 d,#080808, 80-81 d,#444444, 82-159 #bdbdbd,#080808, +|9: 0-1 d,#444444, 2-6 #626262,#080808, 7-79 d,#080808, 80-81 d,#444444, 82-159 #bdbdbd,#080808, +|10: 0-1 d,#444444, 2-6 #626262,#080808, 7-79 d,#080808, 80-81 d,#444444, 82-159 #bdbdbd,#080808, +|11: 0-1 d,#444444, 2-6 #626262,#080808, 7-79 d,#080808, 80-81 d,#444444, 82-159 #bdbdbd,#080808, +|12: 0-1 d,#444444, 2-6 #626262,#080808, 7-79 d,#080808, 80-81 d,#444444, 82-159 #bdbdbd,#080808, +|13: 0-1 d,#444444, 2-6 #626262,#080808, 7-79 d,#080808, 80-81 d,#444444, 82-159 #bdbdbd,#080808, +|14: 0-1 d,#444444, 2-6 #626262,#080808, 7-79 d,#080808, 80-81 d,#444444, 82-159 #bdbdbd,#080808, +|15: 0-1 d,#444444, 2-6 #626262,#080808, 7-79 d,#080808, 80-81 d,#444444, 82-159 #bdbdbd,#080808, +|16: 0-1 d,#444444, 2-6 #626262,#080808, 7-79 d,#080808, 80-81 d,#444444, 82-159 #bdbdbd,#080808, +|17: 0-1 d,#444444, 2-6 #626262,#080808, 7-79 d,#080808, 80-81 d,#444444, 82-159 #bdbdbd,#080808, +|18: 0-1 d,#444444, 2-6 #626262,#080808, 7-79 d,#080808, 80-81 d,#444444, 82-159 #bdbdbd,#080808, +|19: 0-1 d,#444444, 2-6 #626262,#080808, 7-79 d,#080808, 80-81 d,#444444, 82-159 #bdbdbd,#080808, +|20: 0-1 d,#444444, 2-6 #626262,#080808, 7-79 d,#080808, 80-81 d,#444444, 82-159 #bdbdbd,#080808, +|21: 0-1 d,#444444, 2-6 #626262,#080808, 7-79 d,#080808, 80-81 d,#444444, 82-159 #bdbdbd,#080808, +|22: 0-1 d,#444444, 2-6 #626262,#080808, 7-79 d,#080808, 80-81 d,#444444, 82-159 #bdbdbd,#080808, +|23: 0-1 d,#444444, 2-6 #626262,#080808, 7-79 d,#080808, 80-81 d,#444444, 82-159 #bdbdbd,#080808, +== snap commented grid=160x24 cursor=14,2 +|Kill Newcol Tutor Debug NextColor Dump Find Grep Help +| NOR /tmp/pardes-snap/selregex/cwd/m.zig Save Del NOR /tmp/pardes-snap/selregex/cwd Del +| 1 // const one = 1; +| 2 // const two = 2; m.zig +| 3 // const three = 3; +| 4 +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +== snap uncommented grid=160x24 cursor=11,2 +|Kill Newcol Tutor Debug NextColor Dump Find Grep Help +| NOR /tmp/pardes-snap/selregex/cwd/m.zig Save Del NOR /tmp/pardes-snap/selregex/cwd Del +| 1 const one = 1; +| 2 const two = 2; m.zig +| 3 const three = 3; +| 4 +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| +| |
