1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84
|
[2mdiff --cc m/search.go[0m
[2mindex 5b67346,e5b580f..0000000[0m
[1m--- [0mm/[1msearch.go[0m
[1m+++ [0mm/[1msearch.go[0m
[36m@@@ -10,45 -6,9 +10,79 @@@ [1mimport [0m
"github.com/walles/moar/m/linenumbers"
)
[7m++<<<<<<< HEAD[0m
[7m +[0mfunc (p *Pager) scrollToSearchHits() {
[7m +[0m if p.searchPattern == nil {
[7m +[0m // This is not a search
[7m +[0m return
[7m +[0m }
[7m +[0m
[7m +[0m [7m[32mlineNumber[0m := p.scrollPosition.lineNumber(p)
[7m +[27m[32m if lineNumber == nil {[0m
[7m +[27m[32m // No lines to search[0m
[7m +[27m[32m return[0m
[7m +[27m[32m }[0m
[7m +[0m
[7m +[27m[32m firstHitPosition := p.findFirstHit(*lineNumber[0m, nil, false)
[7m +[0m if firstHitPosition == nil [7m[32m&& (*lineNumber != linenumbers.LineNumber{})[27m [0m{
[7m +[0m // Try again from the top
[7m +[0m firstHitPosition = p.findFirstHit(linenumbers.LineNumber{}, lineNumber, false)
[7m +[0m }
[7m +[0m if firstHitPosition == nil {
[7m +[0m // No match, give up
[7m +[0m return
[7m +[0m }
[7m +[0m
[7m +[0m if firstHitPosition.isVisible(p) {
[7m +[0m // Already on-screen, never mind
[7m +[0m return
[7m +[0m }
[7m +[0m
[7m +[0m p.scrollPosition = *firstHitPosition
[7m +[0m}
[7m +[0m
[7m +[0m// NOTE: When we search, we do that by looping over the *input lines*, not[32m [7mthe[0m
[7m +[0m// screen lines. That's why [7m[32mstartPosition is[0m a [7m[32mLineNumber[0m rather than a
[7m +[0m// scrollPosition[32m.[0m
[7m +[27m[32m//[0m
[7m +[27m[32m// The `beforePosition` parameter is exclusive, meaning that line will[0m [32mnot be[0m
[7m +[27m[32m// searched.[0m
[7m +[27m[32m//[0m
[7m +[27m[32m// For the actual[0m searching[32m, this method will call _findFirstHit() in parallel[0m
[7m +[27m[32m// on multiple cores, to help large file search performance[0m.
[7m++||||||| parent of b835e9a (Fix the warnings)[0m
[7m++[27m[31mfunc (p *Pager) scrollToSearchHits() {[0m
[7m++[27m[31m if p.searchPattern == nil {[0m
[7m++[27m[31m // This is not a search[0m
[7m++[27m[31m return[0m
[7m++[27m[31m }[0m
[7m++[0m
[7m++[27m[31m [7mfirstHitPosition[27m := p.[7mfindFirstHit(*p.[27mscrollPosition.lineNumber(p), nil, false)[0m
[7m++[27m[31m if firstHitPosition == nil {[0m
[7m++[27m[31m // Try again from the top[0m
[7m++[27m[31m firstHitPosition = p.findFirstHit(linenumbers.LineNumber{}, [7mp.scrollPosition.[27mlineNumber[7m(p)[27m, false)[0m
[7m++[27m[31m }[0m
[7m++[27m[31m if firstHitPosition == nil {[0m
[7m++[27m[31m // No match, give up[0m
[7m++[27m[31m return[0m
[7m++[27m[31m }[0m
[7m++[0m
[7m++[27m[31m if firstHitPosition.isVisible(p) {[0m
[7m++[27m[31m // Already on-screen, never mind[0m
[7m++[27m[31m return[0m
[7m++[27m[31m }[0m
[7m++[0m
[7m++[27m[31m p.scrollPosition = *firstHitPosition[0m
[7m++[27m[31m}[0m
[7m++[0m
[7m+ [0m// NOTE: When we search, we do that by looping over the *input lines*, not
[7m+ [0m//[31m [7mthe[0m screen lines. That's why [7m[31mwe're using[0m a[31m [7mline number[0m rather than a
[7m+ [0m// scrollPosition [31mfor[0m searching.
[7m++=======[0m
[7m+ [0m// NOTE: When we search, we do that by looping over the *input lines*, not
[7m+ [0m// the screen lines. That's why we're using a line number rather than a
[7m+ [0m// scrollPosition for searching.
[7m++>>>>>>> b835e9a (Fix the warnings)[0m
//
// FIXME: We should take startPosition.deltaScreenLines into account as well!
func (p *Pager) findFirstHit(startPosition linenumbers.LineNumber, beforePosition *linenumbers.LineNumber, backwards bool) *scrollPosition {
|