From 77f9f4664ac9002358735f152ea429e2a578aee2 Mon Sep 17 00:00:00 2001 From: Junegunn Choi Date: Sat, 29 Apr 2023 21:27:30 +0900 Subject: [PATCH] Fix search not triggered when query change and reload happen at the same time Fix #3268 --- src/core.go | 11 ++++++++++- src/terminal.go | 3 ++- test/test_go.rb | 5 +++++ 3 files changed, 17 insertions(+), 2 deletions(-) diff --git a/src/core.go b/src/core.go index a4751a55..d4c06f9f 100644 --- a/src/core.go +++ b/src/core.go @@ -299,10 +299,12 @@ func Run(opts *Options, version string, revision string) { case EvtSearchNew: var command *string + var changed bool switch val := value.(type) { case searchRequest: sort = val.sort command = val.command + changed = val.changed if command != nil { useSnapshot = val.sync } @@ -314,10 +316,17 @@ func Run(opts *Options, version string, revision string) { } else { restart(*command) } + } + if !changed { break } if !useSnapshot { - snapshot, _ = chunkList.Snapshot() + newSnapshot, _ := chunkList.Snapshot() + // We want to avoid showing empty list when reload is triggered + // and the query string is changed at the same time i.e. command != nil && changed + if command == nil || len(newSnapshot) > 0 { + snapshot = newSnapshot + } } reset := !useSnapshot && clearCache() matcher.Reset(snapshot, input(reset), true, !reading, sort, reset) diff --git a/src/terminal.go b/src/terminal.go index 3dc2062f..b0771f16 100644 --- a/src/terminal.go +++ b/src/terminal.go @@ -408,6 +408,7 @@ type searchRequest struct { sort bool sync bool command *string + changed bool } type previewRequest struct { @@ -3622,7 +3623,7 @@ func (t *Terminal) Loop() { t.mutex.Unlock() // Must be unlocked before touching reqBox if changed || newCommand != nil { - t.eventBox.Set(EvtSearchNew, searchRequest{sort: t.sort, sync: reloadSync, command: newCommand}) + t.eventBox.Set(EvtSearchNew, searchRequest{sort: t.sort, sync: reloadSync, command: newCommand, changed: changed}) } for _, event := range events { t.reqBox.Set(event, nil) diff --git a/test/test_go.rb b/test/test_go.rb index 7cdacdef..ff459e1c 100755 --- a/test/test_go.rb +++ b/test/test_go.rb @@ -2861,6 +2861,11 @@ class TestGoFZF < TestBase tmux.send_keys :c tmux.until { |lines| assert_equal 0, lines.match_count } end + + def test_reload_and_change + tmux.send_keys "(echo foo; echo bar) | #{FZF} --bind 'load:reload-sync(sleep 60)+change-query(bar)'", :Enter + tmux.until { |lines| assert_equal 1, lines.match_count } + end end module TestShell