mirror of
https://github.com/Ark0N/Codeman.git
synced 2026-11-15 10:59:32 +01:00
fix(terminal): report the pane directory in the workspace's own spelling
tmux reads a pane's directory from the process cwd, which is always the resolved path, while workingDir keeps the spelling the case was created with. For a workspace reached through a symlink every reading looked like it was outside the workspace, so the browser sent each relative link through the attachment route instead of the workspace routes. Each session now resolves workingDir once in the background, bounded by probePathKind() and a timed realpath(), and setCwd() writes a reading at or under the resolved path back in workingDir's spelling. Until that settles only a reading lexically inside workingDir is taken. An unknown probe or a failed realpath leaves readings untranslated and retries after WORKSPACE_REALPATH_RETRY_MS. Also corrects two comments: cwd is written to state.json but never read back, and a blank pane path is usually a pane whose program exited.
This commit is contained in:
1 parent
54c1692350
commit
f23e18b1fc
6 files changed
+237
-9
No files matched your search
+5
-3
@@ -432,9 +432,11 @@ export function derivePaneExits(rows: PaneRow[], now: number): Map<string, PaneE
|
||||
* - Only sessions with EXACTLY ONE pane answer, for the reason
|
||||
* {@link derivePaneExits} gives: a hand-split session has no single "the"
|
||||
* pane to speak for it.
|
||||
* - Only absolute paths count. A blank field is a tmux that did not answer
|
||||
* (it could not read the process cwd that tick), so a single-pane session
|
||||
* with a blank field keeps its entry from `previous` instead of losing it.
|
||||
* - Only absolute paths count. A blank field is a tmux that could not read the
|
||||
* process cwd: usually a pane whose program exited under `remain-on-exit`
|
||||
* (tmux 3.4 then reports it blank on every read), otherwise a read that
|
||||
* failed that tick. Either way the directory is unknown, not gone, so a
|
||||
* single-pane session with a blank field keeps its entry from `previous`.
|
||||
* A session split into several panes, or one the read no longer lists, gets
|
||||
* no entry: those are authoritative absences, not unanswered questions.
|
||||
*
|
||||
|
||||
Reference in new issue
Block a user