From 67319aed0bfc732ad194fd0291f11ce260822b5a Mon Sep 17 00:00:00 2001 From: Junegunn Choi Date: Tue, 19 May 2026 18:54:35 +0900 Subject: [PATCH] Fix rendering glitch with preview window on the left + footer --- src/terminal.go | 32 ++++++++++++++++++++------------ 1 file changed, 20 insertions(+), 12 deletions(-) diff --git a/src/terminal.go b/src/terminal.go index e2bdc8bb..db4ca9e7 100644 --- a/src/terminal.go +++ b/src/terminal.go @@ -2623,6 +2623,7 @@ func (t *Terminal) resizeWindows(forcePreview bool, redrawBorder bool) { // Set up preview window noBorder := tui.MakeBorderStyle(tui.BorderNone, t.unicode) + cleanLeft := []int{} if forcePreview || t.needPreviewWindow() { var resizePreviewWindows func(previewOpts *previewOpts) resizePreviewWindows = func(previewOpts *previewOpts) { @@ -2741,19 +2742,13 @@ func (t *Terminal) resizeWindows(forcePreview bool, redrawBorder bool) { innerMarginInt[0]+shift+inlineTopLines, innerMarginInt[3]+pwidth+m, innerWidth-pwidth-m, innerHeight-shrink-inlineTopLines-inlineBottomLines, tui.WindowList, noBorder, true) // Clear characters on the margin - // fzf --bind 'space:toggle-preview' --preview ':' --preview-window left,1 - if !hasListBorder { - for y := 0; y < innerHeight; y++ { - t.window.Move(y, -1) - t.window.Print(" ") - } - } - // fzf --bind 'space:toggle-preview' --preview ':' --preview-window left,1,border-none + // fzf --bind 'space:toggle-preview' --preview ':' --preview-window left,1,border-none --footer-border --footer f --header h --header-border if !previewOpts.Border().HasRight() { - for y := 0; y < innerHeight; y++ { - t.window.Move(y, -2) - t.window.Print(" ") - } + cleanLeft = append(cleanLeft, -2) + } + // fzf --bind 'space:toggle-preview' --preview ':' --preview-window left,1 --footer-border --footer f --header h --header-border + if !hasListBorder { + cleanLeft = append(cleanLeft, -1) } innerBorderFn(marginInt[0], marginInt[3]+pwidth, width-pwidth, height) @@ -2980,6 +2975,19 @@ func (t *Terminal) resizeWindows(forcePreview bool, redrawBorder bool) { t.footerWindow = createInnerWindow(t.footerBorder, t.footerBorderShape, tui.WindowFooter, 0) } + for _, w := range []tui.Window{t.window, t.headerBorder, t.headerLinesBorder, t.footerBorder, t.inputBorder} { + if w == nil { + continue + } + + for y := 0; y < w.Height(); y++ { + for _, left := range cleanLeft { + w.Move(y, left) + w.Print(" ") + } + } + } + // When the list label lands on an edge owned by an inline section, swap its bg // so the label reads as part of that section's frame. Fg stays at list-label. listLabel, listLabelLen := t.listLabel, t.listLabelLen