Fix panic caused by incorrectly constructed empty line
Also be more defensive in draw_screen() about rendering lines.
This commit is contained in:
parent
dae49d788e
commit
dfa41f01fd
@ -685,13 +685,11 @@ func rename_lines(path, other_path string, columns, margin_size int, ans []*Logi
|
|||||||
func render(collection *Collection, diff_map map[string]*Patch, screen_size screen_size, largest_line_number int, image_size graphics.Size) (result *LogicalLines, err error) {
|
func render(collection *Collection, diff_map map[string]*Patch, screen_size screen_size, largest_line_number int, image_size graphics.Size) (result *LogicalLines, err error) {
|
||||||
margin_size := utils.Max(3, len(strconv.Itoa(largest_line_number))+1)
|
margin_size := utils.Max(3, len(strconv.Itoa(largest_line_number))+1)
|
||||||
ans := make([]*LogicalLine, 0, 1024)
|
ans := make([]*LogicalLine, 0, 1024)
|
||||||
empty_line := LogicalLine{line_type: EMPTY_LINE}
|
|
||||||
columns := screen_size.columns
|
columns := screen_size.columns
|
||||||
err = collection.Apply(func(path, item_type, changed_path string) error {
|
err = collection.Apply(func(path, item_type, changed_path string) error {
|
||||||
ans = title_lines(path, changed_path, columns, margin_size, ans)
|
ans = title_lines(path, changed_path, columns, margin_size, ans)
|
||||||
defer func() {
|
defer func() {
|
||||||
el := empty_line
|
ans = append(ans, &LogicalLine{line_type: EMPTY_LINE, screen_lines: []*ScreenLine{{}}})
|
||||||
ans = append(ans, &el)
|
|
||||||
}()
|
}()
|
||||||
|
|
||||||
is_binary := !is_path_text(path)
|
is_binary := !is_path_text(path)
|
||||||
|
|||||||
@ -354,10 +354,9 @@ func (self *Handler) draw_screen() {
|
|||||||
seen_images := utils.NewSet[int]()
|
seen_images := utils.NewSet[int]()
|
||||||
for num_written := 0; num_written < self.screen_size.num_lines; num_written++ {
|
for num_written := 0; num_written < self.screen_size.num_lines; num_written++ {
|
||||||
ll := self.logical_lines.At(pos.logical_line)
|
ll := self.logical_lines.At(pos.logical_line)
|
||||||
if ll == nil {
|
if ll == nil || self.logical_lines.ScreenLineAt(pos) == nil {
|
||||||
num_written--
|
num_written--
|
||||||
continue
|
} else {
|
||||||
}
|
|
||||||
is_image := ll.line_type == IMAGE_LINE
|
is_image := ll.line_type == IMAGE_LINE
|
||||||
ll.render_screen_line(pos.screen_line, lp, self.logical_lines.margin_size, self.logical_lines.columns)
|
ll.render_screen_line(pos.screen_line, lp, self.logical_lines.margin_size, self.logical_lines.columns)
|
||||||
if is_image && !seen_images.Has(pos.logical_line) && pos.screen_line >= ll.image_lines_offset {
|
if is_image && !seen_images.Has(pos.logical_line) && pos.screen_line >= ll.image_lines_offset {
|
||||||
@ -374,6 +373,7 @@ func (self *Handler) draw_screen() {
|
|||||||
}
|
}
|
||||||
lp.MoveCursorVertically(1)
|
lp.MoveCursorVertically(1)
|
||||||
lp.QueueWriteString("\x1b[m\r")
|
lp.QueueWriteString("\x1b[m\r")
|
||||||
|
}
|
||||||
if self.logical_lines.IncrementScrollPosBy(&pos, 1) == 0 {
|
if self.logical_lines.IncrementScrollPosBy(&pos, 1) == 0 {
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user