diff --git a/src/renderer/src/components/terminal-pane/terminal-appearance.test.ts b/src/renderer/src/components/terminal-pane/terminal-appearance.test.ts index 42a16b1613a..091b1bc03ee 100644 --- a/src/renderer/src/components/terminal-pane/terminal-appearance.test.ts +++ b/src/renderer/src/components/terminal-pane/terminal-appearance.test.ts @@ -378,6 +378,31 @@ describe('applyTerminalAppearance theme assignment', () => { expect.objectContaining({ paddingX: 4, paddingY: 4 }) ) }) + + it('rounds imported half-pixel padding before fitting', () => { + const pane = makePane(1) + const manager = makeManager([pane]) + const settings = { + ...getDefaultSettings('/tmp'), + terminalPaddingX: 1.5, + terminalPaddingY: 2.5 + } + + applyTerminalAppearance( + manager, + settings, + true, + new Map(), + new Map(), + 'false', + new Map(), + new Map() + ) + + expect(manager.setPaneStyleOptions).toHaveBeenCalledWith( + expect.objectContaining({ paddingX: 2, paddingY: 3 }) + ) + }) }) describe('publishTerminalViewAttributesAtAppStart', () => { diff --git a/src/renderer/src/components/terminal-pane/terminal-appearance.ts b/src/renderer/src/components/terminal-pane/terminal-appearance.ts index fbdb99170b3..855557f3605 100644 --- a/src/renderer/src/components/terminal-pane/terminal-appearance.ts +++ b/src/renderer/src/components/terminal-pane/terminal-appearance.ts @@ -158,6 +158,9 @@ export function applyTerminalAppearance( settings.terminalLigatures, settings.terminalFontFamily ) + // FitAddon parses each CSS padding as an integer, so normalize imported half-pixels before styling and fitting. + const paddingX = Math.round(settings.terminalPaddingX ?? 4) + const paddingY = Math.round(settings.terminalPaddingY ?? 4) // Why before the pane loop: FitAddon subtracts live .xterm padding, so the // CSS vars must be stamped before safeFit or a padding shrink leaves a stale grid. @@ -169,8 +172,8 @@ export function applyTerminalAppearance( opacityTransitionMs: paneStyles.opacityTransitionMs, dividerThicknessPx: paneStyles.dividerThicknessPx, focusFollowsMouse: paneStyles.focusFollowsMouse, - paddingX: settings.terminalPaddingX ?? 4, - paddingY: settings.terminalPaddingY ?? 4 + paddingX, + paddingY }) for (const pane of manager.getPanes()) {