diff --git a/src/options.go b/src/options.go index 6f6b25e..27e32d1 100644 --- a/src/options.go +++ b/src/options.go @@ -1969,25 +1969,25 @@ func postProcessOptions(opts *Options) { // Extend the default key map keymap := defaultKeymap() for key, actions := range opts.Keymap { - var lastChangePreviewWindow *action + reordered := []*action{} for _, act := range actions { switch act.t { case actToggleSort: // To display "+S"/"-S" on info line opts.ToggleSort = true - case actChangePreviewWindow: - lastChangePreviewWindow = act + case actTogglePreview, actShowPreview, actHidePreview, actChangePreviewWindow: + reordered = append(reordered, act) } } - // Re-organize actions so that we only keep the last change-preview-window - // and it comes first in the list. + // Re-organize actions so that we put actions that change the preview window first in the list. // * change-preview-window(up,+10)+preview(sleep 3; cat {})+change-preview-window(up,+20) - // -> change-preview-window(up,+20)+preview(sleep 3; cat {}) - if lastChangePreviewWindow != nil { - reordered := []*action{lastChangePreviewWindow} + // -> change-preview-window(up,+10)+change-preview-window(up,+20)+preview(sleep 3; cat {}) + if len(reordered) > 0 { for _, act := range actions { - if act.t != actChangePreviewWindow { + switch act.t { + case actTogglePreview, actShowPreview, actHidePreview, actChangePreviewWindow: + default: reordered = append(reordered, act) } } diff --git a/src/terminal.go b/src/terminal.go index 1b44bf3..d108bfd 100644 --- a/src/terminal.go +++ b/src/terminal.go @@ -3523,6 +3523,9 @@ func (t *Terminal) Loop() { // Split window options tokens := strings.Split(a.a, "|") + if len(tokens[0]) > 0 && t.initialPreviewOpts.hidden { + t.previewOpts.hidden = false + } parsePreviewWindow(&t.previewOpts, tokens[0]) if len(tokens) > 1 { a.a = strings.Join(append(tokens[1:], tokens[0]), "|") diff --git a/test/test_go.rb b/test/test_go.rb index 1c5c3de..3a76874 100755 --- a/test/test_go.rb +++ b/test/test_go.rb @@ -2493,6 +2493,39 @@ class TestGoFZF < TestBase end end + def test_change_preview_window_rotate_hidden + tmux.send_keys "seq 100 | #{FZF} --preview-window hidden --preview 'echo =={}==' --bind '" \ + "a:change-preview-window(nohidden||down,1|)'", :Enter + tmux.until { |lines| assert_equal 100, lines.match_count } + tmux.until { |lines| refute_includes lines[1], '==1==' } + tmux.send_keys 'a' + tmux.until { |lines| assert_includes lines[1], '==1==' } + tmux.send_keys 'a' + tmux.until { |lines| refute_includes lines[1], '==1==' } + tmux.send_keys 'a' + tmux.until { |lines| assert_includes lines[-2], '==1==' } + tmux.send_keys 'a' + tmux.until { |lines| refute_includes lines[-2], '==1==' } + tmux.send_keys 'a' + tmux.until { |lines| assert_includes lines[1], '==1==' } + end + + def test_change_preview_window_rotate_hidden_down + tmux.send_keys "seq 100 | #{FZF} --bind '?:change-preview-window:up||down|' --preview 'echo =={}==' --preview-window hidden,down,1", :Enter + tmux.until { |lines| assert_equal 100, lines.match_count } + tmux.until { |lines| refute_includes lines[1], '==1==' } + tmux.send_keys '?' + tmux.until { |lines| assert_includes lines[1], '==1==' } + tmux.send_keys '?' + tmux.until { |lines| refute_includes lines[1], '==1==' } + tmux.send_keys '?' + tmux.until { |lines| assert_includes lines[-2], '==1==' } + tmux.send_keys '?' + tmux.until { |lines| refute_includes lines[-2], '==1==' } + tmux.send_keys '?' + tmux.until { |lines| assert_includes lines[1], '==1==' } + end + def test_ellipsis tmux.send_keys 'seq 1000 | tr "\n" , | fzf --ellipsis=SNIPSNIP -e -q500', :Enter tmux.until { |lines| assert_equal 1, lines.match_count }