summaryrefslogtreecommitdiff
path: root/src/body_layer.zig
diff options
context:
space:
mode:
authorGabriel Schneider <[email protected]>2026-09-28 00:01:57 -0300
committerGabriel Schneider <[email protected]>2026-10-01 00:12:14 -0300
commit23f430573efe4f6ef55b0180aa0d742ff4eca1d9 (patch)
treeda2157ba73d6abff4b1674541433294fb6c2daa9 /src/body_layer.zig
parent9584b0682b45f17aaa42157540947904d867777a (diff)
downloadpardes-23f430573efe4f6ef55b0180aa0d742ff4eca1d9.tar.gz
pardes-23f430573efe4f6ef55b0180aa0d742ff4eca1d9.zip
Make a pane's tag a Text edited with the body's own keys
The tag was a fixed buffer with its own one-line editor, a cursor measured across the path, and a hijack of the body's mode while it was typed into. It is now the pane's second Text: its own characters after the computed prefix (path, dirty marker, PDF page), which is never stored in it, so a rename or a dirty marker never moves its cursor. Normal and insert mode are the body's, undo included; `:` moves the keyboard between body and tag, the tag remembers its cursor and starts on Save, and executing a word from it hands the keyboard back. The mouse still sees the prefix: a sweep selects across it and a click on the path drafts a new name. Co-Authored-By: Claude Opus 5.5 <[email protected]>
Diffstat (limited to 'src/body_layer.zig')
-rw-r--r--src/body_layer.zig5
1 files changed, 4 insertions, 1 deletions
diff --git a/src/body_layer.zig b/src/body_layer.zig
index 1f210220..e85e10f1 100644
--- a/src/body_layer.zig
+++ b/src/body_layer.zig
@@ -363,6 +363,9 @@ pub fn renderBody(p: *Pardes, arena: std.mem.Allocator, pane: *Pane, r: Rect, id
for (pane.sel, 0..) |sl, b| {
if (sl.state == .none) continue;
if (sl.state == .done and b != 0) continue;
+ // A select sweep over the tag is the tag's selection, painted there
+ // in the tag's own selection colours.
+ if (b == pardes.sel_slot and @min(sl.r0, sl.r1) < BOX_H) continue;
paintPointerSelection(p, pane, r, tx, tw, tag_y, body_y, sl, sel_btn[b], th.sel_fg);
}
// modal line selection (helix `x`): whole body rows, normal mode only
@@ -461,7 +464,7 @@ pub fn renderBody(p: *Pardes, arena: std.mem.Allocator, pane: *Pane, r: Rect, id
// cursor: tracks the shell cursor until pinned by a click or a key
// (the tag's or a prompt's cursor wins while that is being typed into)
- if (active and !pane.tag_edit and (pane.prompt == .none or pane.prompt == .del_side)) {
+ if (active and pane.focus == .body and (pane.prompt == .none or pane.prompt == .del_side)) {
if (pane.body.mode != .tty) {
const cur = panes.Terminal.gridCursor(pane);
const goff = panes.Terminal.gridOffset(pane);