diff options
| author | Junegunn Choi <junegunn.c@gmail.com> | 2025-06-24 20:23:30 +0900 |
|---|---|---|
| committer | Junegunn Choi <junegunn.c@gmail.com> | 2025-06-24 20:27:24 +0900 |
| commit | 8d81730ec2855d3d32a171f8b675430ffb4c4d59 (patch) | |
| tree | bff2d9a2347b4b04e7d40c947f3744131856f8d1 | |
| parent | 330a85c25c7e15d0913720530cb63d18d4bfe8ac (diff) | |
| download | fzf-8d81730ec2855d3d32a171f8b675430ffb4c4d59.tar.gz | |
with-nth: Do not trim trailing whitespaces with background colors
Example:
echo -en ' \e[48;5;232mhello\e[48;5;147m ' | fzf --ansi --with-nth 1
| -rw-r--r-- | src/core.go | 12 | ||||
| -rw-r--r-- | src/util/chars.go | 5 |
2 files changed, 14 insertions, 3 deletions
diff --git a/src/core.go b/src/core.go index 46cd957a..7a762e3c 100644 --- a/src/core.go +++ b/src/core.go @@ -126,7 +126,17 @@ func Run(opts *Options) (int, error) { return false } item.text, item.colors = ansiProcessor(stringBytes(transformed)) - item.text.TrimTrailingWhitespaces() + + // We should not trim trailing whitespaces with background colors + var maxColorOffset int32 + if item.colors != nil { + for _, ansi := range *item.colors { + if ansi.color.bg >= 0 { + maxColorOffset = util.Max32(maxColorOffset, ansi.offset[1]) + } + } + } + item.text.TrimTrailingWhitespaces(int(maxColorOffset)) item.text.Index = itemIndex item.origText = &data itemIndex++ diff --git a/src/util/chars.go b/src/util/chars.go index e5234303..b1a03fa9 100644 --- a/src/util/chars.go +++ b/src/util/chars.go @@ -184,9 +184,10 @@ func (chars *Chars) TrailingWhitespaces() int { return whitespaces } -func (chars *Chars) TrimTrailingWhitespaces() { +func (chars *Chars) TrimTrailingWhitespaces(maxIndex int) { whitespaces := chars.TrailingWhitespaces() - chars.slice = chars.slice[0 : len(chars.slice)-whitespaces] + end := len(chars.slice) - whitespaces + chars.slice = chars.slice[0:Max(end, maxIndex)] } func (chars *Chars) TrimSuffix(runes []rune) { |
