From 4c70745cc1c8856486dab9e07985cbcf5081e490 Mon Sep 17 00:00:00 2001 From: Junegunn Choi Date: Sat, 27 May 2023 15:43:31 +0900 Subject: Fix bug where preview is not updated after reload when --disabled is set Fix #3311 --- src/merger.go | 64 ++++++++++++++++++++++++++++++++++------------------------- 1 file changed, 37 insertions(+), 27 deletions(-) (limited to 'src/merger.go') diff --git a/src/merger.go b/src/merger.go index 5c12575c..6a235043 100644 --- a/src/merger.go +++ b/src/merger.go @@ -3,32 +3,36 @@ package fzf import "fmt" // EmptyMerger is a Merger with no data -var EmptyMerger = NewMerger(nil, [][]Result{}, false, false) +func EmptyMerger(revision int) *Merger { + return NewMerger(nil, [][]Result{}, false, false, revision) +} // Merger holds a set of locally sorted lists of items and provides the view of // a single, globally-sorted list type Merger struct { - pattern *Pattern - lists [][]Result - merged []Result - chunks *[]*Chunk - cursors []int - sorted bool - tac bool - final bool - count int - pass bool + pattern *Pattern + lists [][]Result + merged []Result + chunks *[]*Chunk + cursors []int + sorted bool + tac bool + final bool + count int + pass bool + revision int } // PassMerger returns a new Merger that simply returns the items in the // original order -func PassMerger(chunks *[]*Chunk, tac bool) *Merger { +func PassMerger(chunks *[]*Chunk, tac bool, revision int) *Merger { mg := Merger{ - pattern: nil, - chunks: chunks, - tac: tac, - count: 0, - pass: true} + pattern: nil, + chunks: chunks, + tac: tac, + count: 0, + pass: true, + revision: revision} for _, chunk := range *mg.chunks { mg.count += chunk.count @@ -37,17 +41,18 @@ func PassMerger(chunks *[]*Chunk, tac bool) *Merger { } // NewMerger returns a new Merger -func NewMerger(pattern *Pattern, lists [][]Result, sorted bool, tac bool) *Merger { +func NewMerger(pattern *Pattern, lists [][]Result, sorted bool, tac bool, revision int) *Merger { mg := Merger{ - pattern: pattern, - lists: lists, - merged: []Result{}, - chunks: nil, - cursors: make([]int, len(lists)), - sorted: sorted, - tac: tac, - final: false, - count: 0} + pattern: pattern, + lists: lists, + merged: []Result{}, + chunks: nil, + cursors: make([]int, len(lists)), + sorted: sorted, + tac: tac, + final: false, + count: 0, + revision: revision} for _, list := range mg.lists { mg.count += len(list) @@ -55,6 +60,11 @@ func NewMerger(pattern *Pattern, lists [][]Result, sorted bool, tac bool) *Merge return &mg } +// Revision returns revision number +func (mg *Merger) Revision() int { + return mg.revision +} + // Length returns the number of items func (mg *Merger) Length() int { return mg.count -- cgit v1.2.3