feat(v0.3): M6 — new tab opens in the active tab's directory
- title-util.cwdFromOsc7: parse cwd from OSC 7 (file:// URL); 4 unit tests - terminal-session: register OSC 7 handler → cwd getter; opts.cwd → sent in the attach frame on a fresh session - protocol/types: ClientMessage attach.cwd (absolute path); validated - session/manager/server: thread cwd → createSession spawn cwd (defaults homeDir) - tabs: '+' (newTab) opens in the active tab's reported cwd, falls back to home - Verified: server attach.cwd spawns there; cd /private/tmp → + → new tab pwd is /private/tmp. 212 tests green.
This commit is contained in:
@@ -23,3 +23,19 @@ export function folderFromTitle(title: string): string | null {
|
||||
if (slash !== -1) s = s.slice(slash + 1)
|
||||
return s || null
|
||||
}
|
||||
|
||||
/**
|
||||
* Parse the full cwd path from an OSC 7 sequence payload (M6).
|
||||
* data = "file://host/Users/me/dir" → "/Users/me/dir"
|
||||
* Returns null if it isn't a file:// URL.
|
||||
*/
|
||||
export function cwdFromOsc7(data: string): string | null {
|
||||
const m = /^file:\/\/[^/]*(\/.*)$/.exec(data.trim())
|
||||
if (m === null) return null
|
||||
const path = m[1] as string
|
||||
try {
|
||||
return decodeURIComponent(path)
|
||||
} catch {
|
||||
return path
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user