summaryrefslogtreecommitdiff
path: root/src/exec.zig
diff options
context:
space:
mode:
authorGabriel Schneider <[email protected]>2026-09-29 03:11:42 -0300
committerGabriel Schneider <[email protected]>2026-10-01 00:12:15 -0300
commit073695995ecf4a269da8d338b23bfab1d3369c05 (patch)
tree0d8e573e509d2462de31cb1f7198dc5e44aabaf2 /src/exec.zig
parentcf49c329cb401a5c530ef2533066702fe1545360 (diff)
downloadpardes-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.zig29
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;