summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJunegunn Choi <junegunn.c@gmail.com>2023-05-05 15:08:08 +0900
committerJunegunn Choi <junegunn.c@gmail.com>2023-05-05 15:33:03 +0900
commit94999101e358385f3ca67a6ec9512f549196b802 (patch)
tree1b2bab23c86aeaa4aaaceb95396e22a113e2c7f7
parente619b7c4f4e0da09b87a239b8f52ad909bb5f1e0 (diff)
Fix the behavior of change-preview-window action (#3280)
* change-preview-window restores the initial preview window options, and overrides the properties that are specified * However, 'hidden' property is treated differently. It is set to 'false' if the specified properties of the action is non-empty. * cf. toggle-preview takes the "current" preview window options and toggles the 'hidden' property.
-rw-r--r--src/options.go18
-rw-r--r--src/terminal.go3
-rwxr-xr-xtest/test_go.rb33
3 files changed, 45 insertions, 9 deletions
diff --git a/src/options.go b/src/options.go
index 6f6b25e8..27e32d13 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 1b44bf3e..d108bfd9 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 1c5c3de4..3a768744 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 }