From f92f9f137a7a222465892f30776db48a7ecc8ad9 Mon Sep 17 00:00:00 2001 From: Junegunn Choi Date: Sun, 16 Mar 2025 01:55:11 +0900 Subject: [PATCH] Fix wrapping of the list section # The first line of the second chunk would prematurely wrap printf '%0500s\n\n%0500s' 0 0 | fzf --wrap --read0 --- src/util/chars.go | 5 ++++- src/util/chars_test.go | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/util/chars.go b/src/util/chars.go index dd037caa..e5234303 100644 --- a/src/util/chars.go +++ b/src/util/chars.go @@ -294,9 +294,10 @@ func (chars *Chars) Lines(multiLine bool, maxLines int, wrapCols int, wrapSignWi line = line[:len(line)-1] } + hasWrapSign := false for { cols := wrapCols - if len(wrapped) > 0 { + if hasWrapSign { cols -= wrapSignWidth } _, overflowIdx := RunesWidth(line, 0, tabstop, cols) @@ -309,9 +310,11 @@ func (chars *Chars) Lines(multiLine bool, maxLines int, wrapCols int, wrapSignWi return wrapped, true } wrapped = append(wrapped, line[:overflowIdx]) + hasWrapSign = true line = line[overflowIdx:] continue } + hasWrapSign = false // Restore trailing '\n' if newline { diff --git a/src/util/chars_test.go b/src/util/chars_test.go index 0d3e4f37..c3d6c994 100644 --- a/src/util/chars_test.go +++ b/src/util/chars_test.go @@ -76,7 +76,7 @@ func TestCharsLines(t *testing.T) { check(true, 100, 3, 1, 1, 8, false) // With wrap sign (3 + 2) - check(true, 100, 3, 2, 1, 12, false) + check(true, 100, 3, 2, 1, 10, false) // With wrap sign (3 + 2) and no multi-line check(false, 100, 3, 2, 1, 13, false)