Remove invalid 'result' event when using --sync option

When the search for the initial query doesn't finish immediately
fzf would trigger an invalid 'result' event for an empty query.

  seq 100 | fzf --query 99 --bind result:accept --sync
    # Prints 99

  seq 1000000 | fzf --query 99 --bind result:accept --sync
    # Should print 99, but fzf would print 1
This commit is contained in:
Junegunn Choi 2024-04-20 14:40:48 +09:00
parent f864f8b5f7
commit d8bfb6712d
No known key found for this signature in database
GPG Key ID: 254BC280FEF9C627
3 changed files with 5 additions and 6 deletions

View File

@ -812,7 +812,7 @@ e.g.
.TP
.B "--sync"
Synchronous search for multi-staged filtering. If specified, fzf will launch
ncurses finder only after the input stream is complete.
the finder only after the input stream is complete.
.RS
e.g. \fBfzf --multi | fzf --sync\fR

View File

@ -298,8 +298,7 @@ func Run(opts *Options, version string, revision string) {
total = count
terminal.UpdateCount(total, !reading, value.(*string))
if opts.Sync {
opts.Sync = false
terminal.UpdateList(PassMerger(&snapshot, opts.Tac, snapshotRevision))
terminal.UpdateList(PassMerger(&snapshot, opts.Tac, snapshotRevision), false)
}
if heightUnknown && !deferred {
determine(!reading)
@ -384,7 +383,7 @@ func Run(opts *Options, version string, revision string) {
determine(val.final)
}
}
terminal.UpdateList(val)
terminal.UpdateList(val, true)
}
}
}

View File

@ -1067,7 +1067,7 @@ func (t *Terminal) UpdateProgress(progress float32) {
}
// UpdateList updates Merger to display the list
func (t *Terminal) UpdateList(merger *Merger) {
func (t *Terminal) UpdateList(merger *Merger, triggerResultEvent bool) {
t.mutex.Lock()
prevIndex := minItem.Index()
reset := t.revision != merger.Revision()
@ -1118,7 +1118,7 @@ func (t *Terminal) UpdateList(merger *Merger) {
t.eventChan <- one
}
}
if t.hasResultActions {
if triggerResultEvent && t.hasResultActions {
t.eventChan <- tui.Result.AsEvent()
}
}