-
Notifications
You must be signed in to change notification settings - Fork 5
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge branch 'johan/conflict-context'
- Loading branch information
Showing
3 changed files
with
196 additions
and
19 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,84 @@ | ||
diff --cc m/search.go | ||
index 5b67346,e5b580f..0000000 | ||
--- m/search.go | ||
+++ m/search.go | ||
@@@ -10,45 -6,9 +10,79 @@@ import | ||
"github.com/walles/moar/m/linenumbers" | ||
) | ||
|
||
++<<<<<<< HEAD | ||
+func (p *Pager) scrollToSearchHits() { | ||
+ if p.searchPattern == nil { | ||
+ // This is not a search | ||
+ return | ||
+ } | ||
+ | ||
+ lineNumber := p.scrollPosition.lineNumber(p) | ||
+ if lineNumber == nil { | ||
+ // No lines to search | ||
+ return | ||
+ } | ||
+ | ||
+ firstHitPosition := p.findFirstHit(*lineNumber, nil, false) | ||
+ if firstHitPosition == nil && (*lineNumber != linenumbers.LineNumber{}) { | ||
+ // Try again from the top | ||
+ firstHitPosition = p.findFirstHit(linenumbers.LineNumber{}, lineNumber, false) | ||
+ } | ||
+ if firstHitPosition == nil { | ||
+ // No match, give up | ||
+ return | ||
+ } | ||
+ | ||
+ if firstHitPosition.isVisible(p) { | ||
+ // Already on-screen, never mind | ||
+ return | ||
+ } | ||
+ | ||
+ p.scrollPosition = *firstHitPosition | ||
+} | ||
+ | ||
+// NOTE: When we search, we do that by looping over the *input lines*, not the | ||
+// screen lines. That's why startPosition is a LineNumber rather than a | ||
+// scrollPosition. | ||
+// | ||
+// The `beforePosition` parameter is exclusive, meaning that line will not be | ||
+// searched. | ||
+// | ||
+// For the actual searching, this method will call _findFirstHit() in parallel | ||
+// on multiple cores, to help large file search performance. | ||
++||||||| parent of b835e9a (Fix the warnings) | ||
++func (p *Pager) scrollToSearchHits() { | ||
++ if p.searchPattern == nil { | ||
++ // This is not a search | ||
++ return | ||
++ } | ||
++ | ||
++ firstHitPosition := p.findFirstHit(*p.scrollPosition.lineNumber(p), nil, false) | ||
++ if firstHitPosition == nil { | ||
++ // Try again from the top | ||
++ firstHitPosition = p.findFirstHit(linenumbers.LineNumber{}, p.scrollPosition.lineNumber(p), false) | ||
++ } | ||
++ if firstHitPosition == nil { | ||
++ // No match, give up | ||
++ return | ||
++ } | ||
++ | ||
++ if firstHitPosition.isVisible(p) { | ||
++ // Already on-screen, never mind | ||
++ return | ||
++ } | ||
++ | ||
++ p.scrollPosition = *firstHitPosition | ||
++} | ||
++ | ||
+ // NOTE: When we search, we do that by looping over the *input lines*, not | ||
+ // the screen lines. That's why we're using a line number rather than a | ||
+ // scrollPosition for searching. | ||
++======= | ||
++// NOTE: When we search, we do that by looping over the *input lines*, not | ||
++// the screen lines. That's why we're using a line number rather than a | ||
++// scrollPosition for searching. | ||
++>>>>>>> b835e9a (Fix the warnings) | ||
// | ||
// FIXME: We should take startPosition.deltaScreenLines into account as well! | ||
func (p *Pager) findFirstHit(startPosition linenumbers.LineNumber, beforePosition *linenumbers.LineNumber, backwards bool) *scrollPosition { |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,84 @@ | ||
[2mdiff --cc m/search.go[0m | ||
[2mindex 5b67346,e5b580f..0000000[0m | ||
[1m--- m/search.go[0m | ||
[1m+++ m/search.go[0m | ||
[36m@@@ -10,45 -6,9 +10,79 @@@ [1mimport [0m | ||
"github.com/walles/moar/m/linenumbers" | ||
) | ||
|
||
[32m++<<<<<<< HEAD[0m | ||
[32m +func (p *Pager) scrollToSearchHits() {[0m | ||
[32m + if p.searchPattern == nil {[0m | ||
[32m + // This is not a search[0m | ||
[32m + return[0m | ||
[32m + }[0m | ||
[32m +[0m | ||
[32m + [7mlineNumber[27m := p.scrollPosition.lineNumber(p)[0m | ||
[32m + if lineNumber == nil {[0m | ||
[32m + // No lines to search[0m | ||
[32m + return[0m | ||
[32m + }[0m | ||
[32m +[0m | ||
[32m +[7m firstHitPosition := p.findFirstHit(*lineNumber[27m, nil, false)[0m | ||
[32m + if firstHitPosition == nil[7m && (*lineNumber != linenumbers.LineNumber{})[27m {[0m | ||
[32m + // Try again from the top[0m | ||
[32m + firstHitPosition = p.findFirstHit(linenumbers.LineNumber{}, lineNumber, false)[0m | ||
[32m + }[0m | ||
[32m + if firstHitPosition == nil {[0m | ||
[32m + // No match, give up[0m | ||
[32m + return[0m | ||
[32m + }[0m | ||
[32m +[0m | ||
[32m + if firstHitPosition.isVisible(p) {[0m | ||
[32m + // Already on-screen, never mind[0m | ||
[32m + return[0m | ||
[32m + }[0m | ||
[32m +[0m | ||
[32m + p.scrollPosition = *firstHitPosition[0m | ||
[32m +}[0m | ||
[32m +[0m | ||
[32m +// NOTE: When we search, we do that by looping over the *input lines*, not[7m the[0m | ||
[32m +// screen lines. That's why [7mstartPosition is[27m a [7mLineNumber[27m rather than a[0m | ||
[32m +// scrollPosition[7m.[0m | ||
[32m +//[0m | ||
[32m +// The `beforePosition` parameter is exclusive, meaning that line will not be[0m | ||
[32m +// searched.[0m | ||
[32m +//[0m | ||
[32m +// For the actual searching, this method will call _findFirstHit() in parallel[0m | ||
[32m +// on multiple cores, to help large file search performance.[0m | ||
[32m++||||||| parent of b835e9a (Fix the warnings)[0m | ||
[32m++[31mfunc (p *Pager) scrollToSearchHits() {[0m | ||
[32m++[31m if p.searchPattern == nil {[0m | ||
[32m++[31m // This is not a search[0m | ||
[32m++[31m return[0m | ||
[32m++[31m }[0m | ||
[32m++[0m | ||
[32m++[31m [7mfirstHitPosition[27m := [7mp.findFirstHit(*[27mp.scrollPosition.lineNumber(p), nil, false)[0m | ||
[32m++[31m if firstHitPosition == nil {[0m | ||
[32m++[31m // Try again from the top[0m | ||
[32m++[31m firstHitPosition = p.findFirstHit(linenumbers.LineNumber{}, [7mp.scrollPosition.[27mlineNumber[7m(p)[27m, false)[0m | ||
[32m++[31m }[0m | ||
[32m++[31m if firstHitPosition == nil {[0m | ||
[32m++[31m // No match, give up[0m | ||
[32m++[31m return[0m | ||
[32m++[31m }[0m | ||
[32m++[0m | ||
[32m++[31m if firstHitPosition.isVisible(p) {[0m | ||
[32m++[31m // Already on-screen, never mind[0m | ||
[32m++[31m return[0m | ||
[32m++[31m }[0m | ||
[32m++[0m | ||
[32m++[31m p.scrollPosition = *firstHitPosition[0m | ||
[32m++[31m}[0m | ||
[32m++[0m | ||
[32m++[31m// NOTE: When we search, we do that by looping over the *input lines*, not[0m | ||
[32m++[31m//[7m the[27m screen lines. That's why [7mwe're using[27m a[7m line number[27m rather than a[0m | ||
[32m++[31m// scrollPosition [7mfor[27m searching.[0m | ||
[32m++=======[0m | ||
[32m+ // NOTE: When we search, we do that by looping over the *input lines*, not[0m | ||
[32m+ // the screen lines. That's why we're using a line number rather than a[0m | ||
[32m+ // scrollPosition for searching.[0m | ||
[32m++>>>>>>> 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 { |