summaryrefslogtreecommitdiff
path: root/src/host_io.zig
diff options
context:
space:
mode:
Diffstat (limited to 'src/host_io.zig')
-rw-r--r--src/host_io.zig11
1 files changed, 11 insertions, 0 deletions
diff --git a/src/host_io.zig b/src/host_io.zig
index 1fab3729..8ddb0c90 100644
--- a/src/host_io.zig
+++ b/src/host_io.zig
@@ -1351,6 +1351,14 @@ test "the child environment replaces the launcher's terminal identity exactly on
extern "c" fn unsetenv(name: [*:0]const u8) c_int;
+fn exportWinid(serial: u32) void {
+ var buf: [16]u8 = undefined;
+ if (serial != 0) if (std.fmt.bufPrintSentinel(&buf, "{d}", .{serial}, 0)) |text| {
+ if (Shell.setenv("winid", text, 1) == 0) return;
+ } else |_| {};
+ _ = unsetenv("winid");
+}
+
/// The longest line a command pane runs (exec.zig refuses a longer one).
pub const exec_command_max = pardes.exec.command_max;
@@ -1418,6 +1426,9 @@ pub fn forkShell(
if (core) |c| (if (c.panes[pane]) |pn| pn.serial else 0) else 0,
if (core) |c| !c.opts.nested else false,
);
+ // acme's `$winid`: the pane a command was run from, so a script it runs
+ // can address that pane; unset for a shell and a header tag's command.
+ exportWinid(if (core) |c| (if (c.panes[pane]) |pn| (if (pn.command != null) pn.command_from else 0) else 0) else 0);
if (helper) |path| {
const c = core.?;
const pn = c.panes[pane].?;