Fix extra new line in the preview window

When a colored text ends at the right end of the window

Fix #3209
pull/3214/head
Junegunn Choi 1 year ago
parent 1116e481be
commit 3c34dd8275
No known key found for this signature in database
GPG Key ID: 254BC280FEF9C627

@ -1828,12 +1828,14 @@ func (t *Terminal) renderPreviewText(height int, lines []string, lineNo int, unc
trimmed, isTrimmed = t.trimRight(trimmed, maxWidth-t.pwindow.X()) trimmed, isTrimmed = t.trimRight(trimmed, maxWidth-t.pwindow.X())
} }
str, width := t.processTabs(trimmed, prefixWidth) str, width := t.processTabs(trimmed, prefixWidth)
prefixWidth += width if width > prefixWidth {
if t.theme.Colored && ansi != nil && ansi.colored() { prefixWidth = width
lbg = ansi.lbg if t.theme.Colored && ansi != nil && ansi.colored() {
fillRet = t.pwindow.CFill(ansi.fg, ansi.bg, ansi.attr, str) lbg = ansi.lbg
} else { fillRet = t.pwindow.CFill(ansi.fg, ansi.bg, ansi.attr, str)
fillRet = t.pwindow.CFill(tui.ColPreview.Fg(), tui.ColPreview.Bg(), tui.AttrRegular, str) } else {
fillRet = t.pwindow.CFill(tui.ColPreview.Fg(), tui.ColPreview.Bg(), tui.AttrRegular, str)
}
} }
return !isTrimmed && return !isTrimmed &&
(fillRet == tui.FillContinue || t.previewOpts.wrap && fillRet == tui.FillNextLine) (fillRet == tui.FillContinue || t.previewOpts.wrap && fillRet == tui.FillNextLine)

@ -2656,6 +2656,23 @@ class TestGoFZF < TestBase
tmux.send_keys :Enter tmux.send_keys :Enter
tmux.until { |lines| assert_equal 99, lines.item_count } tmux.until { |lines| assert_equal 99, lines.item_count }
end end
def test_no_extra_newline_issue_3209
tmux.send_keys(%(seq 100 | #{FZF} --height 10 --preview-window up,wrap --preview 'printf "─%.0s" $(seq 1 "$((FZF_PREVIEW_COLUMNS - 5))"); printf $"\\e[7m%s\\e[0m" title; echo; echo something'), :Enter)
expected = <<~OUTPUT
something
3
2
> 1
100/100
>
OUTPUT
tmux.until { assert_block(expected, _1) }
end
end end
module TestShell module TestShell

Loading…
Cancel
Save