summaryrefslogtreecommitdiff
path: root/src/merger.go
diff options
context:
space:
mode:
authorJunegunn Choi <junegunn.c@gmail.com>2023-05-27 15:43:31 +0900
committerJunegunn Choi <junegunn.c@gmail.com>2023-05-27 15:51:04 +0900
commit4c70745cc1c8856486dab9e07985cbcf5081e490 (patch)
tree84a742cb75d32c13142a9354e4aa40858abc0f07 /src/merger.go
parent7795748a3f42e86a802cc9ea9569429892f47f95 (diff)
downloadfzf-4c70745cc1c8856486dab9e07985cbcf5081e490.tar.gz
Fix bug where preview is not updated after reload when --disabled is set
Fix #3311
Diffstat (limited to 'src/merger.go')
-rw-r--r--src/merger.go64
1 files changed, 37 insertions, 27 deletions
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