diff options
| author | Gabriel Schneider <[email protected]> | 2026-09-29 09:03:41 -0300 |
|---|---|---|
| committer | Gabriel Schneider <[email protected]> | 2026-10-01 00:12:16 -0300 |
| commit | 78d6f64e72be2a22c40feaf012636bc8f04d46de (patch) | |
| tree | ae2f5828eb32f78e1536a75235706828067e6e0b /src/macos.zig | |
| parent | 039ae6aa70d963f942d8a5747060c67599664af9 (diff) | |
| download | pardes-78d6f64e72be2a22c40feaf012636bc8f04d46de.tar.gz pardes-78d6f64e72be2a22c40feaf012636bc8f04d46de.zip | |
A shell given a directory is not taken to be in this process's before it has spoken, so it logs no rename to the session's and back
Each host read /proc/<pid>/cwd right after forking the shell and at every
frame after; before the shell's chdir that says this process's directory,
a rename to it, then the real one a frame later, a rename back. A shell
given a directory is named by it already (newShell) and is no longer
asked at fork; and until it has printed anything, an answer naming this
process's directory is not taken.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Diffstat (limited to 'src/macos.zig')
| -rw-r--r-- | src/macos.zig | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/src/macos.zig b/src/macos.zig index 75834844..9b17803b 100644 --- a/src/macos.zig +++ b/src/macos.zig @@ -2450,7 +2450,10 @@ fn spawnShell(ctx: ?*anyopaque, pane: u8, cwd: []const u8) void { .cmd = .{ .watched = (if (core.panes[pane]) |pn| pn.command != null else false) and host_io.watchExit(child.pid), .fd = child.file.handle }, }; var lbuf: [1024]u8 = undefined; - if (host_io.shellCwd(child.pid, &lbuf)) |wd| core.setCwd(pane, wd); + // Only a shell given no directory is asked where it is: one given a + // directory is named by it already (newShell), and asked now, before + // its chdir, it would answer this process's, a rename to undo. + if (cwd.len == 0) if (host_io.shellCwd(child.pid, &lbuf)) |wd| core.setCwd(pane, wd); if (st.started) if (st.ptys[pane]) |*pt| startReader(st, pt, pane); } |
