From b9630e12c6abdf61f4456faec004e66f0a0171f5 Mon Sep 17 00:00:00 2001 From: Chris Wanstrath Date: Thu, 19 Feb 2026 13:26:18 -0800 Subject: [PATCH] Add ANSI color coding to session list output --- src/cli.ts | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/src/cli.ts b/src/cli.ts index b8657da..fcfbe38 100755 --- a/src/cli.ts +++ b/src/cli.ts @@ -211,22 +211,33 @@ program return } - const icons: Record = { idle: "◌", active: "◯", dirty: "◎", saved: "●" } + const reset = "\x1b[0m" + const dim = "\x1b[2m" + const bold = "\x1b[1m" + const green = "\x1b[32m" + const yellow = "\x1b[33m" + const cyan = "\x1b[36m" + const white = "\x1b[37m" + + const icons: Record = { idle: `${dim}◌${reset}`, active: `${green}◯${reset}`, dirty: `${yellow}◎${reset}`, saved: `${cyan}●${reset}` } + const branchColors: Record = { idle: dim, active: green, dirty: yellow, saved: cyan } const branchWidth = Math.max(6, ...sessions.map((s) => s.branch.length)) const cols = process.stdout.columns || 80 const prefixWidth = branchWidth + 4 - console.log(` ${"BRANCH".padEnd(branchWidth)} PROMPT`) + console.log(` ${dim}${"BRANCH".padEnd(branchWidth)} PROMPT${reset}`) for (const s of sessions) { const prompt = s.prompt ?? "" - const icon = icons[statuses[s.branch]] + const status = statuses[s.branch] + const icon = icons[status] + const bc = branchColors[status] const maxPrompt = cols - prefixWidth const truncated = maxPrompt > 3 && prompt.length > maxPrompt ? prompt.slice(0, maxPrompt - 3) + "..." : prompt - console.log(`${icon} ${s.branch.padEnd(branchWidth)} ${truncated}`) + console.log(`${icon} ${bc}${s.branch.padEnd(branchWidth)}${reset} ${dim}${truncated}${reset}`) } - console.log(`\n◌ idle · ◯ active · ◎ unsaved · ● saved`) + console.log(`\n${dim}◌ idle${reset} · ${green}◯ active${reset} · ${yellow}◎ unsaved${reset} · ${cyan}● saved${reset}`) }) // ── sandlot open ─────────────────────────────────────────────