From 27febbde319e03c2d023d45b598cf639302a00b8 Mon Sep 17 00:00:00 2001 From: Aaron Hogue Date: Thu, 30 Apr 2026 14:45:43 -0400 Subject: [PATCH 1/2] feat(tui): add content_padding option to control horizontal content margins Add a new content_padding option to tui.json that lets users configure the horizontal padding of the main content area. This replaces the hardcoded paddingLeft/paddingRight=2 on the session container and the corresponding contentWidth calculation. Users can set this in tui.json: { "content_padding": 0 } The value is an integer from 0-20 (default: 2, preserving current behavior). Closes #25142 --- packages/opencode/src/cli/cmd/tui/config/tui-schema.ts | 7 +++++++ packages/opencode/src/cli/cmd/tui/routes/session/index.tsx | 5 +++-- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/packages/opencode/src/cli/cmd/tui/config/tui-schema.ts b/packages/opencode/src/cli/cmd/tui/config/tui-schema.ts index ed79e8e52418..3445eeb05f32 100644 --- a/packages/opencode/src/cli/cmd/tui/config/tui-schema.ts +++ b/packages/opencode/src/cli/cmd/tui/config/tui-schema.ts @@ -24,6 +24,13 @@ export const TuiOptions = z.object({ .optional() .describe("Control diff rendering style: 'auto' adapts to terminal width, 'stacked' always shows single column"), mouse: z.boolean().optional().describe("Enable or disable mouse capture (default: true)"), + content_padding: z + .number() + .int() + .min(0) + .max(20) + .optional() + .describe("Horizontal padding (in columns) for the main content area (default: 2)"), }) export const TuiInfo = z diff --git a/packages/opencode/src/cli/cmd/tui/routes/session/index.tsx b/packages/opencode/src/cli/cmd/tui/routes/session/index.tsx index 8855338d1d4b..996b26f9a1cb 100644 --- a/packages/opencode/src/cli/cmd/tui/routes/session/index.tsx +++ b/packages/opencode/src/cli/cmd/tui/routes/session/index.tsx @@ -174,7 +174,8 @@ export function Session() { return false }) const showTimestamps = createMemo(() => timestamps() === "show") - const contentWidth = createMemo(() => dimensions().width - (sidebarVisible() ? 42 : 0) - 4) + const contentPadding = tuiConfig.content_padding ?? 2 + const contentWidth = createMemo(() => dimensions().width - (sidebarVisible() ? 42 : 0) - contentPadding * 2) const providers = createMemo(() => Model.index(sync.data.provider)) const scrollAcceleration = createMemo(() => getScrollAcceleration(tuiConfig)) @@ -1055,7 +1056,7 @@ export function Session() { }} > - + (scroll = r)} From 993118cf84f1eecb0b0a09a908672967c60fe465 Mon Sep 17 00:00:00 2001 From: Aaron Hogue Date: Thu, 30 Apr 2026 22:36:56 -0400 Subject: [PATCH 2/2] fix: set default in schema definition instead of consumer fallback --- packages/opencode/src/cli/cmd/tui/config/tui-schema.ts | 4 ++-- packages/opencode/src/cli/cmd/tui/routes/session/index.tsx | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/opencode/src/cli/cmd/tui/config/tui-schema.ts b/packages/opencode/src/cli/cmd/tui/config/tui-schema.ts index 3445eeb05f32..e78d489b6294 100644 --- a/packages/opencode/src/cli/cmd/tui/config/tui-schema.ts +++ b/packages/opencode/src/cli/cmd/tui/config/tui-schema.ts @@ -29,8 +29,8 @@ export const TuiOptions = z.object({ .int() .min(0) .max(20) - .optional() - .describe("Horizontal padding (in columns) for the main content area (default: 2)"), + .default(2) + .describe("Horizontal padding (in columns) for the main content area"), }) export const TuiInfo = z diff --git a/packages/opencode/src/cli/cmd/tui/routes/session/index.tsx b/packages/opencode/src/cli/cmd/tui/routes/session/index.tsx index 996b26f9a1cb..4f59cd14daa3 100644 --- a/packages/opencode/src/cli/cmd/tui/routes/session/index.tsx +++ b/packages/opencode/src/cli/cmd/tui/routes/session/index.tsx @@ -174,7 +174,7 @@ export function Session() { return false }) const showTimestamps = createMemo(() => timestamps() === "show") - const contentPadding = tuiConfig.content_padding ?? 2 + const contentPadding = tuiConfig.content_padding const contentWidth = createMemo(() => dimensions().width - (sidebarVisible() ? 42 : 0) - contentPadding * 2) const providers = createMemo(() => Model.index(sync.data.provider))