summaryrefslogtreecommitdiff
path: root/src/exec.zig
diff options
context:
space:
mode:
authorGabriel Schneider <[email protected]>2026-09-30 23:32:31 -0300
committerGabriel Schneider <[email protected]>2026-10-01 00:12:18 -0300
commit48c129a701d60abdb836bbb400d949cc61ed2820 (patch)
tree42f6ab7e64bc02c208a062eb31ad4937e4339f04 /src/exec.zig
parentafaa2428b346f6dd1d165abe1396dce9150fa05c (diff)
downloadpardes-48c129a701d60abdb836bbb400d949cc61ed2820.tar.gz
pardes-48c129a701d60abdb836bbb400d949cc61ed2820.zip
A command run from a pane gets acme's $winid, the serial of the pane it was run from; one from a column's or the workspace's tag gets none
PARDES_PANE names the command pane itself, so a script a click ran had no way to address the pane it was run in, as acme's win scripts do with $winid. The command pane now remembers that pane and its child gets winid set to it; a header tag's command, which no pane owns, gets winid unset. PARDES_PANE is unchanged. Co-Authored-By: Claude Opus 5.5 <[email protected]>
Diffstat (limited to 'src/exec.zig')
-rw-r--r--src/exec.zig9
1 files changed, 9 insertions, 0 deletions
diff --git a/src/exec.zig b/src/exec.zig
index e15ad12c..47484105 100644
--- a/src/exec.zig
+++ b/src/exec.zig
@@ -792,6 +792,7 @@ fn runCommand(p: *Pardes, from: usize, line: []const u8) ?usize {
if (panes.terminal.onAlternateScreen(pane)) panes.terminal.feedOutput(p, pane, "\x1b[?1049l");
panes.terminal.feedOutput(p, pane, "\x1b[?1000l\x1b[?1002l\x1b[?1003l\x1b[?1006l\x1b[?2004l\x1b[?25h\x1b[0m");
echoCommand(p, pane, line);
+ pane.command_from = winid(p, src);
p.emitSpawn(id, pane.serial, pane.cwdSlice());
noteRun(p, pane, "run", line);
return id;
@@ -804,12 +805,20 @@ fn runCommand(p: *Pardes, from: usize, line: []const u8) ?usize {
p.reportError(from, "exec", err);
return null;
};
+ pane.command_from = winid(p, src);
echoCommand(p, pane, line);
placeNew(p, from, from, free, .command);
noteRun(p, pane, "run", line);
return free;
}
+/// The serial a command's `$winid` names: the pane it was run from, none
+/// (0) from a column's or the workspace's tag.
+fn winid(p: *const Pardes, src: ?*Pane) u32 {
+ if (p.exec_header) return 0;
+ return if (src) |s| s.serial else 0;
+}
+
/// `% line` above a command's output, every command, as a shell echoes
/// what it was given; its newlines the terminal's, so a multi-line command
/// does not staircase.