mirror of
https://github.com/junegunn/fzf.git
synced 2026-05-16 21:45:15 +08:00
Preserve wrap state across change-preview-window
toggle-preview-wrap (and -wrap-word) modifies t.activePreviewOpts.wrap, but change-preview-window resets t.previewOpts to t.initialPreviewOpts, discarding the user's toggle. Carry wrap and wrapWord over so toggles survive a layout change. Explicit wrap / nowrap tokens in the new spec still win, so cycling and the empty-token reset are unaffected. Close #4791
This commit is contained in:
@@ -1,6 +1,11 @@
|
|||||||
CHANGELOG
|
CHANGELOG
|
||||||
=========
|
=========
|
||||||
|
|
||||||
|
0.73.0
|
||||||
|
------
|
||||||
|
- Bug fixes
|
||||||
|
- `change-preview-window` no longer resets `wrap` / `wrap-word` state set via `toggle-preview-wrap` / `toggle-preview-wrap-word`. Layout fields still snap to the preset, so cycling and the empty-token reset behave as before. The new spec can still override by including `wrap` or `nowrap` explicitly. (#4791)
|
||||||
|
|
||||||
0.72.0
|
0.72.0
|
||||||
------
|
------
|
||||||
_Release highlights: https://junegunn.github.io/fzf/releases/0.72.0/_
|
_Release highlights: https://junegunn.github.io/fzf/releases/0.72.0/_
|
||||||
|
|||||||
@@ -7819,6 +7819,11 @@ func (t *Terminal) Loop() error {
|
|||||||
t.previewOpts = t.initialPreviewOpts
|
t.previewOpts = t.initialPreviewOpts
|
||||||
t.previewOpts.command = currentPreviewOpts.command
|
t.previewOpts.command = currentPreviewOpts.command
|
||||||
|
|
||||||
|
// Carry over toggle-driven state so toggle-preview-wrap survives
|
||||||
|
// a change-preview-window. Tokens below can still override.
|
||||||
|
t.previewOpts.wrap = currentPreviewOpts.wrap
|
||||||
|
t.previewOpts.wrapWord = currentPreviewOpts.wrapWord
|
||||||
|
|
||||||
// Split window options
|
// Split window options
|
||||||
tokens := strings.Split(a.a, "|")
|
tokens := strings.Split(a.a, "|")
|
||||||
if len(tokens[0]) > 0 && t.initialPreviewOpts.hidden {
|
if len(tokens[0]) > 0 && t.initialPreviewOpts.hidden {
|
||||||
|
|||||||
@@ -383,6 +383,49 @@ class TestPreview < TestInteractive
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_change_preview_window_preserves_wrap_toggle
|
||||||
|
# https://github.com/junegunn/fzf/issues/4791
|
||||||
|
tmux.send_keys "#{FZF} --preview 'for i in $(seq $FZF_PREVIEW_COLUMNS); do echo -n .; done; echo -n .; echo wrapped; echo 2nd line' " \
|
||||||
|
"--preview-window 'right,nowrap,border-rounded' " \
|
||||||
|
'--bind ctrl-w:toggle-preview-wrap ' \
|
||||||
|
'--bind ctrl-r:change-preview-window:border-bold', :Enter
|
||||||
|
sleep 2
|
||||||
|
# Initial: nowrap, rounded border. The long line is truncated; "wrapped" is hidden.
|
||||||
|
tmux.until do |lines|
|
||||||
|
assert_includes lines[2], '2nd line'
|
||||||
|
assert(lines.any? { it.include?('╭') })
|
||||||
|
end
|
||||||
|
# Toggle wrap on.
|
||||||
|
tmux.send_keys 'C-w'
|
||||||
|
tmux.until do |lines|
|
||||||
|
assert_includes lines[2], 'wrapped'
|
||||||
|
assert_includes lines[3], '2nd line'
|
||||||
|
end
|
||||||
|
# change-preview-window swaps the border to bold; wrap state must persist.
|
||||||
|
tmux.send_keys 'C-r'
|
||||||
|
tmux.until do |lines|
|
||||||
|
assert(lines.any? { it.include?('┏') }) # border actually changed
|
||||||
|
refute(lines.any? { it.include?('╭') })
|
||||||
|
assert_includes lines[2], 'wrapped' # wrap was preserved
|
||||||
|
assert_includes lines[3], '2nd line'
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_change_preview_window_overrides_wrap_explicitly
|
||||||
|
# When the new spec sets wrap/nowrap explicitly, it should still win.
|
||||||
|
tmux.send_keys "#{FZF} --preview 'for i in $(seq $FZF_PREVIEW_COLUMNS); do echo -n .; done; echo -n .; echo wrapped; echo 2nd line' " \
|
||||||
|
"--preview-window 'right,wrap' " \
|
||||||
|
'--bind ctrl-r:change-preview-window:nowrap', :Enter
|
||||||
|
# Initial: wrap is on.
|
||||||
|
tmux.until do |lines|
|
||||||
|
assert_includes lines[2], 'wrapped'
|
||||||
|
assert_includes lines[3], '2nd line'
|
||||||
|
end
|
||||||
|
# Explicit nowrap in the spec must override the (initially wrapped) state.
|
||||||
|
tmux.send_keys 'C-r'
|
||||||
|
tmux.until { |lines| assert_includes lines[2], '2nd line' }
|
||||||
|
end
|
||||||
|
|
||||||
def test_preview_follow_wrap
|
def test_preview_follow_wrap
|
||||||
tmux.send_keys "seq 1 | #{FZF} --preview 'seq 1000' --preview-window right,2,follow,wrap", :Enter
|
tmux.send_keys "seq 1 | #{FZF} --preview 'seq 1000' --preview-window right,2,follow,wrap", :Enter
|
||||||
tmux.until { |lines| assert_equal 1, lines.match_count }
|
tmux.until { |lines| assert_equal 1, lines.match_count }
|
||||||
|
|||||||
Reference in New Issue
Block a user