From febaadbee5b896928664449d7f7c3c6fe2220e26 Mon Sep 17 00:00:00 2001 From: Junegunn Choi Date: Sat, 4 Oct 2025 20:06:58 +0900 Subject: [PATCH] Fix stray character artifacts when scrollbar is hidden Fix #4537 --- src/terminal.go | 7 +++++++ test/test_layout.rb | 23 +++++++++++++++++++++++ 2 files changed, 30 insertions(+) diff --git a/src/terminal.go b/src/terminal.go index d18a0ba7..1f0a6e41 100644 --- a/src/terminal.go +++ b/src/terminal.go @@ -2397,6 +2397,13 @@ func (t *Terminal) resizeWindows(forcePreview bool, redrawBorder bool) { innerHeight-shrink, tui.WindowList, noBorder, true) } + if len(t.scrollbar) == 0 { + for y := 0; y < t.window.Height(); y++ { + t.window.Move(y, t.window.Width()-1) + t.window.Print(" ") + } + } + createInnerWindow := func(b tui.Window, shape tui.BorderShape, windowType tui.WindowType, shift int) tui.Window { top := b.Top() left := b.Left() + shift diff --git a/test/test_layout.rb b/test/test_layout.rb index db04c044..56d944cf 100644 --- a/test/test_layout.rb +++ b/test/test_layout.rb @@ -1192,6 +1192,29 @@ class TestLayout < TestInteractive tmux.until { assert_block(block, it) } end + # https://github.com/junegunn/fzf/issues/4537 + def test_no_scrollbar_preview_toggle + x = 'x' * 300 + y = 'y' * 300 + tmux.send_keys %(yes #{x} | head -1000 | fzf --bind 'tab:toggle-preview' --border --no-scrollbar --preview 'echo #{y}' --preview-window 'border-left'), :Enter + + # │ ▌ xxxxxxxx·· │ yyyyyyyy│ + tmux.until do |lines| + lines.any? { it.match?(/x·· │ y+│$/) } + end + tmux.send_keys :Tab + + # │ ▌ xxxxxxxx·· │ + tmux.until do |lines| + lines.none? { it.match?(/x··y│$/) } + end + + tmux.send_keys :Tab + tmux.until do |lines| + lines.any? { it.match?(/x·· │ y+│$/) } + end + end + def test_combinations skip unless ENV['LONGTEST']