fix(terminal): normalize padding before fit

This commit is contained in:
Brennan Benson
2026-08-14 18:30:19 -07:00
parent 09f213c48d
commit 183bcb2aa4
2 changed files with 30 additions and 2 deletions
@@ -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', () => {
@@ -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()) {