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)