/** * public/title-util.ts — derive a short tab title from a terminal OSC title. * * Pure, dependency-free (no xterm/DOM) so it's unit-testable in node. */ /** * Derive the **current folder** from the terminal's OSC title. * * Most shells emit titles like `user@host:~/path/to/dir` (zsh/bash default). * Take the part after the last ':' (the path), then its last segment (the * folder name). `~` (home) stays `~`. Returns null for an empty title; falls * back to the raw-ish basename when there's no `user@host:` shape (e.g. a * running command title). */ export function folderFromTitle(title: string): string | null { let s = title.trim() if (!s) return null const colon = s.lastIndexOf(':') if (colon !== -1) s = s.slice(colon + 1).trim() s = s.replace(/\/+$/, '') // strip trailing slash const slash = s.lastIndexOf('/') 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 } }