diff --git a/packages/tui/src/component/dialog-config.tsx b/packages/tui/src/component/dialog-config.tsx index ced25dd183c..e3c2f4f7061 100644 --- a/packages/tui/src/component/dialog-config.tsx +++ b/packages/tui/src/component/dialog-config.tsx @@ -126,6 +126,15 @@ export const settings: Setting[] = [ values: ["horizontal", "vertical"], keywords: ["sidebar", "orientation", "left"], }, + { + title: "Shortcut numbers", + category: "Tabs", + path: ["tabs", "numbers"], + default: false, + values: [false, true], + labels: ["off", "on"], + keywords: ["keys", "numeric", "labels"], + }, { title: "Layout", category: "Diffs", diff --git a/packages/tui/src/component/session-tabs.tsx b/packages/tui/src/component/session-tabs.tsx index 43c887e6a2f..95c5b0c543f 100644 --- a/packages/tui/src/component/session-tabs.tsx +++ b/packages/tui/src/component/session-tabs.tsx @@ -664,7 +664,7 @@ function VerticalSessionTabs(props: { controller?: SessionTabsController; animat selectable={false} attributes={selected() ? TextAttributes.BOLD : undefined} > - {sessionTabShortcutLabel(index())} + {config.tabs.numbers ? sessionTabShortcutLabel(index()) : ""} - {tab === NEW_SESSION_TAB ? "+" : sessionTabShortcutLabel(tabNumber() - 1)} + {tab === NEW_SESSION_TAB ? "+" : config.tabs.numbers ? sessionTabShortcutLabel(tabNumber() - 1) : ""} frame.includes("Second")) + expect(app.captureCharFrame()).not.toContain("1 First") await app.mockMouse.pressDown(5, 1) await app.mockMouse.release(40, 0) expect(active()).toBe("first") diff --git a/packages/tui/test/config-v2.test.tsx b/packages/tui/test/config-v2.test.tsx index 23017e09f43..35b058e24ff 100644 --- a/packages/tui/test/config-v2.test.tsx +++ b/packages/tui/test/config-v2.test.tsx @@ -20,11 +20,12 @@ test("validates mini replay settings", () => { test("validates the session tabs setting", () => { const decode = Schema.decodeUnknownSync(Info) - expect(decode({ tabs: { enabled: true, layout: "vertical" } })).toEqual({ - tabs: { enabled: true, layout: "vertical" }, + expect(decode({ tabs: { enabled: true, layout: "vertical", numbers: true } })).toEqual({ + tabs: { enabled: true, layout: "vertical", numbers: true }, }) expect(() => decode({ tabs: { layout: true } })).toThrow() expect(() => decode({ tabs: { enabled: "on" } })).toThrow() + expect(() => decode({ tabs: { numbers: "on" } })).toThrow() expect(decode({ prompt: { image_preview: true } })).toEqual({ prompt: { image_preview: true } }) expect(decode({ session: { image_preview: true } })).toEqual({ session: { image_preview: true } }) expect(decode({ session: { new_location: "inherit" } })).toEqual({ session: { new_location: "inherit" } }) @@ -48,7 +49,7 @@ test("resolves nested config and keybind defaults", () => { expect(config.scroll).toEqual({ speed: 2, acceleration: true }) expect(config.diffs).toEqual({ view: "split" }) expect(config.debug).toEqual({ devtools: true }) - expect(config.tabs).toEqual({ enabled: true, scope: "cwd", layout: "horizontal" }) + expect(config.tabs).toEqual({ enabled: true, scope: "cwd", layout: "horizontal", numbers: false }) expect(config.session.new_location).toBe("launch") }) @@ -56,6 +57,7 @@ test("shows resolved tab defaults in settings", () => { expect(settings.find((setting) => setting.path.join(".") === "tabs.enabled")?.default).toBe(true) expect(settings.find((setting) => setting.path.join(".") === "tabs.scope")?.default).toBe("cwd") expect(settings.find((setting) => setting.path.join(".") === "tabs.layout")?.default).toBe("horizontal") + expect(settings.find((setting) => setting.path.join(".") === "tabs.numbers")?.default).toBe(false) }) test("shows the new session location default in settings", () => {