fix(tmux): prefer split-or-defer with FIFO deferred attach
This commit is contained in:
@@ -1,6 +1,8 @@
|
||||
import { MIN_PANE_HEIGHT, MIN_PANE_WIDTH } from "./types"
|
||||
import type { CapacityConfig } from "./types"
|
||||
|
||||
export const MAIN_PANE_RATIO = 0.5
|
||||
const DEFAULT_MAIN_PANE_SIZE = MAIN_PANE_RATIO * 100
|
||||
export const MAX_COLS = 2
|
||||
export const MAX_ROWS = 3
|
||||
export const MAX_GRID_SIZE = 4
|
||||
@@ -8,3 +10,48 @@ export const DIVIDER_SIZE = 1
|
||||
|
||||
export const MIN_SPLIT_WIDTH = 2 * MIN_PANE_WIDTH + DIVIDER_SIZE
|
||||
export const MIN_SPLIT_HEIGHT = 2 * MIN_PANE_HEIGHT + DIVIDER_SIZE
|
||||
|
||||
function clamp(value: number, min: number, max: number): number {
|
||||
return Math.max(min, Math.min(max, value))
|
||||
}
|
||||
|
||||
export function getMainPaneSizePercent(config?: CapacityConfig): number {
|
||||
return clamp(config?.mainPaneSize ?? DEFAULT_MAIN_PANE_SIZE, 20, 80)
|
||||
}
|
||||
|
||||
export function computeMainPaneWidth(
|
||||
windowWidth: number,
|
||||
config?: CapacityConfig,
|
||||
): number {
|
||||
const safeWindowWidth = Math.max(0, windowWidth)
|
||||
if (!config) {
|
||||
return Math.floor(safeWindowWidth * MAIN_PANE_RATIO)
|
||||
}
|
||||
|
||||
const dividerWidth = DIVIDER_SIZE
|
||||
const minMainPaneWidth = config?.mainPaneMinWidth ?? Math.floor(safeWindowWidth * MAIN_PANE_RATIO)
|
||||
const minAgentPaneWidth = config?.agentPaneWidth ?? MIN_PANE_WIDTH
|
||||
const percentageMainPaneWidth = Math.floor(
|
||||
(safeWindowWidth - dividerWidth) * (getMainPaneSizePercent(config) / 100),
|
||||
)
|
||||
const maxMainPaneWidth = Math.max(0, safeWindowWidth - dividerWidth - minAgentPaneWidth)
|
||||
|
||||
return clamp(
|
||||
Math.max(percentageMainPaneWidth, minMainPaneWidth),
|
||||
0,
|
||||
maxMainPaneWidth,
|
||||
)
|
||||
}
|
||||
|
||||
export function computeAgentAreaWidth(
|
||||
windowWidth: number,
|
||||
config?: CapacityConfig,
|
||||
): number {
|
||||
const safeWindowWidth = Math.max(0, windowWidth)
|
||||
if (!config) {
|
||||
return Math.floor(safeWindowWidth * (1 - MAIN_PANE_RATIO))
|
||||
}
|
||||
|
||||
const mainPaneWidth = computeMainPaneWidth(safeWindowWidth, config)
|
||||
return Math.max(0, safeWindowWidth - DIVIDER_SIZE - mainPaneWidth)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user