summaryrefslogtreecommitdiff
path: root/src/panes.zig
diff options
context:
space:
mode:
authorGabriel Schneider <[email protected]>2026-09-24 10:06:08 -0300
committerGabriel Schneider <[email protected]>2026-10-01 00:12:14 -0300
commit3f6ad1bc30570348297ae4aa6d1fd676de229a09 (patch)
treeb52037635072e90e0ff20c80a15c5d18c578d445 /src/panes.zig
parent82c4f9e7212f569d6343dd03ddbab3520a784993 (diff)
downloadpardes-3f6ad1bc30570348297ae4aa6d1fd676de229a09.tar.gz
pardes-3f6ad1bc30570348297ae4aa6d1fd676de229a09.zip
Ask from the keyboard which neighbour a closed pane's rows go to
Del takes a side: `Del k` gives the closed pane's rows to the nearest expanded pane above it, `Del j` to the one below, each falling back to the other side when it has none. DelAbove and DelBelow are those two lines, with no path of their own under SPC. A bare Del started from a key -- SPC d, Enter on the tag word, a row run from an output buffer -- on a pane with expanded panes both above and below asks instead of guessing. The question is a prompt like Save's or a search's (Pane.Prompt.del_side), so it is painted on the pane's notice band by the same path, and the next key answers it before any mode sees it: k or Up, j or Down, anything else keeps the pane, as does a click. Only a key press sets Pardes.can_ask, so a click, a 9P ctl or event write, a startup line, a restore and a shell exiting all close the pane at once, the rows going where layout.absorbVWeight has always sent them. A collapsed pane is not asked about (it has only a tag row to give), and collapsed neighbours are passed over (layout.expandedNeighbor, which Collapse now uses too). removePane and absorbVWeight take the recipient; every other caller passes null. Three scripts that closed a middle pane with SPC d answer k, which is where the rows went before, and their goldens are unchanged. delask.snap covers the question, Esc, j, a clicked DelBelow and a clicked Del. Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
Diffstat (limited to 'src/panes.zig')
-rw-r--r--src/panes.zig6
1 files changed, 5 insertions, 1 deletions
diff --git a/src/panes.zig b/src/panes.zig
index 0b565676..0b4204aa 100644
--- a/src/panes.zig
+++ b/src/panes.zig
@@ -94,6 +94,9 @@ pub const Pane = struct {
pipe: struct { at: u16, how: modal.Normal.PipeBehavior },
/// Save on a scratch buffer or a terminal: the tail is a path to write to.
save: u16,
+ /// Del from the keyboard with open panes both above and below: which
+ /// one takes the rows. Nothing is typed; one key answers.
+ del_side,
};
pub const Cwd = union(enum) { none, inherited: *Pane, owned: []u8 };
@@ -338,7 +341,7 @@ pub const Pane = struct {
}
pub fn promptAt(p: *const Pane) ?u16 {
return switch (p.prompt) {
- .none => null,
+ .none, .del_side => null,
.search, .save => |at| at,
.pipe => |pipe| pipe.at,
};
@@ -347,6 +350,7 @@ pub const Pane = struct {
/// What an open prompt shows on its notice band: the one answer every
/// painter of the band reads.
pub fn promptText(p: *const Pane) ?[]const u8 {
+ if (p.prompt == .del_side) return config.del_question;
const at = p.promptAt() orelse return null;
return p.tagSlice()[@min(at, p.tag_tail_len)..];
}