diff --git a/tools/cmd/diff/render.go b/tools/cmd/diff/render.go index 5e95adac3..a3b45d7fe 100644 --- a/tools/cmd/diff/render.go +++ b/tools/cmd/diff/render.go @@ -144,7 +144,10 @@ type LogicalLines struct { } func (self *LogicalLines) At(i int) *LogicalLine { return self.lines[i] } -func (self *LogicalLines) Len() int { return len(self.lines) } +func (self *LogicalLines) ScreenLineAt(pos ScrollPos) string { + return self.lines[pos.logical_line].screen_lines[pos.screen_line] +} +func (self *LogicalLines) Len() int { return len(self.lines) } func (self *LogicalLines) NumScreenLinesTo(a ScrollPos) (ans int) { return self.Minus(a, ScrollPos{}) diff --git a/tools/cmd/diff/ui.go b/tools/cmd/diff/ui.go index 64e259489..0742adcea 100644 --- a/tools/cmd/diff/ui.go +++ b/tools/cmd/diff/ui.go @@ -241,27 +241,18 @@ func (self *Handler) draw_screen() { lp.Println(`Calculating diff, please wait...`) return } - num_written := 0 - for i, line := range self.logical_lines.lines[self.scroll_pos.logical_line:] { - if num_written >= self.screen_size.num_lines { + pos := self.scroll_pos + for num_written := 0; num_written < self.screen_size.num_lines; num_written++ { + sl := self.logical_lines.ScreenLineAt(pos) + if self.current_search != nil { + sl = self.current_search.markup_line(sl, pos) + } + lp.QueueWriteString(sl) + lp.MoveCursorVertically(1) + lp.QueueWriteString("\r") + if self.logical_lines.IncrementScrollPosBy(&pos, 1) == 0 { break } - screen_lines := line.screen_lines - if i == 0 { - screen_lines = screen_lines[self.scroll_pos.screen_line:] - } - for snum, sl := range screen_lines { - if self.current_search != nil { - sl = self.current_search.markup_line(sl, ScrollPos{i, snum}.Add(self.scroll_pos)) - } - lp.QueueWriteString(sl) - lp.MoveCursorVertically(1) - lp.QueueWriteString("\r") - num_written++ - if num_written >= self.screen_size.num_lines { - break - } - } } self.draw_status_line() }