diff options
| author | Gabriel Schneider <[email protected]> | 2026-09-29 03:11:42 -0300 |
|---|---|---|
| committer | Gabriel Schneider <[email protected]> | 2026-10-01 00:12:15 -0300 |
| commit | 073695995ecf4a269da8d338b23bfab1d3369c05 (patch) | |
| tree | 0d8e573e509d2462de31cb1f7198dc5e44aabaf2 /src/exec.zig | |
| parent | cf49c329cb401a5c530ef2533066702fe1545360 (diff) | |
| download | pardes-073695995ecf4a269da8d338b23bfab1d3369c05.tar.gz pardes-073695995ecf4a269da8d338b23bfab1d3369c05.zip | |
+Errors with no room anywhere logs its text rather than fail the Edit
Edit's p and = put their output in +Errors, and when its column had no
room the placement refusal failed the whole Edit. +Errors now tries every
column with room, the last first, and with none its text is logged as msg
records, a line each; the Edit succeeds.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Diffstat (limited to 'src/exec.zig')
| -rw-r--r-- | src/exec.zig | 29 |
1 files changed, 26 insertions, 3 deletions
diff --git a/src/exec.zig b/src/exec.zig index 0a7e71f9..bb4309a4 100644 --- a/src/exec.zig +++ b/src/exec.zig @@ -851,9 +851,32 @@ pub fn placeNew(p: *Pardes, from: usize, origin: ?usize, id: usize, kind: NewPan layout.snapColWeights(p, f.col); if (!layout.splitTallest(p, f.col, id) or !layout.placedRoomy(p, id, &before)) { if (layout.findPane(p, id) == null) layout.insert(p, f.col, p.col_n[f.col], id); - p.unplaced.set(id); - p.reportError(from, "placement", error.NoPaneRoom); - return; + // +Errors goes wherever there is room, last column first; with + // none, its maker says the text some other way (appendErrors). + if (kind == .errors) { + layout.removePane(p, id); + var c = p.ncol; + while (c > 0) { + c -= 1; + if (c == f.col) continue; + for (p.col_panes[c][0..p.col_n[c]]) |k| p.rects[k] = before[k]; + layout.snapColWeights(p, c); + if (p.col_n[c] == 0) { + layout.insert(p, c, 0, id); + break; + } + if (layout.splitTallest(p, c, id) and layout.placedRoomy(p, id, &before)) break; + if (layout.findPane(p, id) != null) layout.removePane(p, id); + } else { + layout.insert(p, f.col, p.col_n[f.col], id); + p.unplaced.set(id); + return; + } + } else { + p.unplaced.set(id); + p.reportError(from, "placement", error.NoPaneRoom); + return; + } } }; if (kind == .command) return; |
