diff --git a/src/terminal.go b/src/terminal.go index b99b952ffa4..b2b38254a35 100644 --- a/src/terminal.go +++ b/src/terminal.go @@ -1036,12 +1036,14 @@ func (t *Terminal) printPreview() { break } else if lineNo > 0 { var fillRet tui.FillReturn + prefixWidth := 0 _, _, ansi = extractColor(line, ansi, func(str string, ansi *ansiState) bool { trimmed := []rune(str) if !t.preview.wrap { trimmed, _ = t.trimRight(trimmed, maxWidth-t.pwindow.X()) } - str, _ = t.processTabs(trimmed, 0) + str, width := t.processTabs(trimmed, prefixWidth) + prefixWidth += width if t.theme != nil && ansi != nil && ansi.colored() { fillRet = t.pwindow.CFill(ansi.fg, ansi.bg, ansi.attr, str) } else { diff --git a/test/test_go.rb b/test/test_go.rb index 213f15c24ff..c34a925917b 100755 --- a/test/test_go.rb +++ b/test/test_go.rb @@ -1532,6 +1532,12 @@ def test_inverse_only_search_should_not_sort_the_result tmux.until { |lines| lines[-4] == ' b' } tmux.until { |lines| lines[-5] == ' ccc' } end + + def test_preview_correct_tab_width_after_ansi_reset_code + writelines tempname, ["\x1b[31m+\x1b[m\t\x1b[32mgreen"] + tmux.send_keys "#{FZF} --preview 'cat #{tempname}'", :Enter + tmux.until { |lines| lines[1].include?('+ green') } + end end module TestShell