diff --git a/src/core.go b/src/core.go index 71cf04da..cad139dd 100644 --- a/src/core.go +++ b/src/core.go @@ -195,15 +195,14 @@ func Run(opts *Options) (int, error) { } nth := opts.Nth - nthRevision := 0 + inputRevision := revision{} + snapshotRevision := revision{} patternCache := make(map[string]*Pattern) patternBuilder := func(runes []rune) *Pattern { return BuildPattern(cache, patternCache, opts.Fuzzy, opts.FuzzyAlgo, opts.Extended, opts.Case, opts.Normalize, forward, withPos, - opts.Filter == nil, nth, opts.Delimiter, nthRevision, runes) + opts.Filter == nil, nth, opts.Delimiter, inputRevision, runes) } - inputRevision := revision{} - snapshotRevision := revision{} matcher := NewMatcher(cache, patternBuilder, sort, opts.Tac, eventBox, inputRevision) // Filtering mode @@ -382,7 +381,6 @@ func Run(opts *Options) (int, error) { if val.nth != nil { // Change nth and clear caches nth = *val.nth - nthRevision++ patternCache = make(map[string]*Pattern) cache.Clear() inputRevision.bumpMinor() diff --git a/src/item.go b/src/item.go index 1943486f..ca32f1bd 100644 --- a/src/item.go +++ b/src/item.go @@ -9,7 +9,7 @@ import ( type transformed struct { // Because nth can be changed dynamically by change-nth action, we need to // keep the revision number at the time of transformation. - revision int + revision revision tokens []Token } diff --git a/src/pattern.go b/src/pattern.go index dd9c5292..29149fe7 100644 --- a/src/pattern.go +++ b/src/pattern.go @@ -60,7 +60,7 @@ type Pattern struct { cacheKey string delimiter Delimiter nth []Range - revision int + revision revision procFun map[termType]algo.Algo cache *ChunkCache } @@ -73,7 +73,7 @@ func init() { // BuildPattern builds Pattern object from the given arguments func BuildPattern(cache *ChunkCache, patternCache map[string]*Pattern, fuzzy bool, fuzzyAlgo algo.Algo, extended bool, caseMode Case, normalize bool, forward bool, - withPos bool, cacheable bool, nth []Range, delimiter Delimiter, revision int, runes []rune) *Pattern { + withPos bool, cacheable bool, nth []Range, delimiter Delimiter, revision revision, runes []rune) *Pattern { var asString string if extended { diff --git a/src/pattern_test.go b/src/pattern_test.go index 0f0632cd..24b17744 100644 --- a/src/pattern_test.go +++ b/src/pattern_test.go @@ -68,7 +68,7 @@ func buildPattern(fuzzy bool, fuzzyAlgo algo.Algo, extended bool, caseMode Case, withPos bool, cacheable bool, nth []Range, delimiter Delimiter, runes []rune) *Pattern { return BuildPattern(NewChunkCache(), make(map[string]*Pattern), fuzzy, fuzzyAlgo, extended, caseMode, normalize, forward, - withPos, cacheable, nth, delimiter, 0, runes) + withPos, cacheable, nth, delimiter, revision{}, runes) } func TestExact(t *testing.T) { diff --git a/src/terminal.go b/src/terminal.go index d91bff48..e138b62c 100644 --- a/src/terminal.go +++ b/src/terminal.go @@ -2932,7 +2932,7 @@ func (t *Terminal) printHighlighted(result Result, colBase tui.ColorPair, colMat } if !wholeCovered && t.nthAttr > 0 { var tokens []Token - if item.transformed != nil { + if item.transformed != nil && item.transformed.revision == t.merger.revision { tokens = item.transformed.tokens } else { tokens = Transform(Tokenize(item.text.ToString(), t.delimiter), t.nthCurrent)