fix: size main pane using configured layout percentage

Main pane resize now uses main_pane_size instead of a hardcoded 50 percent fallback so post-split layout remains stable and predictable.

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
This commit is contained in:
YeonGyu-Kim
2026-02-17 03:40:46 +09:00
parent da3f24b8b1
commit 17da22704e
3 changed files with 17 additions and 5 deletions

View File

@@ -22,9 +22,17 @@ export interface ActionExecutorDeps {
enforceMainPaneWidth: typeof enforceMainPaneWidth
}
async function enforceMainPane(windowState: WindowState, deps: ActionExecutorDeps): Promise<void> {
async function enforceMainPane(
windowState: WindowState,
config: TmuxConfig,
deps: ActionExecutorDeps,
): Promise<void> {
if (!windowState.mainPane) return
await deps.enforceMainPaneWidth(windowState.mainPane.paneId, windowState.windowWidth)
await deps.enforceMainPaneWidth(
windowState.mainPane.paneId,
windowState.windowWidth,
config.main_pane_size,
)
}
export async function executeActionWithDeps(
@@ -35,7 +43,7 @@ export async function executeActionWithDeps(
if (action.type === "close") {
const success = await deps.closeTmuxPane(action.paneId)
if (success) {
await enforceMainPane(ctx.windowState, deps)
await enforceMainPane(ctx.windowState, ctx.config, deps)
}
return { success }
}
@@ -65,7 +73,7 @@ export async function executeActionWithDeps(
if (result.success) {
await deps.applyLayout(ctx.config.layout, ctx.config.main_pane_size)
await enforceMainPane(ctx.windowState, deps)
await enforceMainPane(ctx.windowState, ctx.config, deps)
}
return {

View File

@@ -86,6 +86,7 @@ describe("executeAction", () => {
expect(mockApplyLayout).toHaveBeenCalledTimes(1)
expect(mockApplyLayout).toHaveBeenCalledWith("main-horizontal", 55)
expect(mockEnforceMainPaneWidth).toHaveBeenCalledTimes(1)
expect(mockEnforceMainPaneWidth).toHaveBeenCalledWith("%0", 220, 55)
})
test("does not apply layout when spawn fails", async () => {

View File

@@ -29,13 +29,15 @@ export async function applyLayout(
export async function enforceMainPaneWidth(
mainPaneId: string,
windowWidth: number,
mainPaneSize: number,
): Promise<void> {
const { log } = await import("../../logger")
const tmux = await getTmuxPath()
if (!tmux) return
const dividerWidth = 1
const mainWidth = Math.floor((windowWidth - dividerWidth) / 2)
const boundedMainPaneSize = Math.max(20, Math.min(80, mainPaneSize))
const mainWidth = Math.floor(((windowWidth - dividerWidth) * boundedMainPaneSize) / 100)
const proc = spawn([tmux, "resize-pane", "-t", mainPaneId, "-x", String(mainWidth)], {
stdout: "ignore",
@@ -47,5 +49,6 @@ export async function enforceMainPaneWidth(
mainPaneId,
mainWidth,
windowWidth,
mainPaneSize: boundedMainPaneSize,
})
}