title lines are now displayed

This commit is contained in:
Kovid Goyal 2023-03-19 20:44:39 +05:30
parent 5d8b5ab720
commit ef7f13d893
No known key found for this signature in database
GPG Key ID: 06BC317B515ACE7C
4 changed files with 34 additions and 9 deletions

View File

@ -331,7 +331,7 @@ func diff(jobs []diff_job, context_count int) (ans map[string]*Patch, err error)
err error err error
patch *Patch patch *Patch
} }
results := make(chan result) results := make(chan result, len(jobs))
ctx.Parallel(0, len(jobs), func(nums <-chan int) { ctx.Parallel(0, len(jobs), func(nums <-chan int) {
for i := range nums { for i := range nums {
job := jobs[i] job := jobs[i]

View File

@ -19,6 +19,7 @@ const (
TITLE_LINE LineType = iota TITLE_LINE LineType = iota
CHANGE_LINE CHANGE_LINE
IMAGE_LINE IMAGE_LINE
EMPTY_LINE
) )
type Reference struct { type Reference struct {
@ -27,10 +28,9 @@ type Reference struct {
} }
type LogicalLine struct { type LogicalLine struct {
src Reference src Reference
line_type LineType line_type LineType
margin_size, columns int screen_lines []string
screen_lines []string
} }
func fit_in(text string, count int) string { func fit_in(text string, count int) string {
@ -71,7 +71,7 @@ func create_formatters() {
added_margin_format = ctx.SprintFunc(fmt.Sprintf("fg=%s bg=%s", conf.Margin_fg.AsRGBSharp(), conf.Added_margin_bg.AsRGBSharp())) added_margin_format = ctx.SprintFunc(fmt.Sprintf("fg=%s bg=%s", conf.Margin_fg.AsRGBSharp(), conf.Added_margin_bg.AsRGBSharp()))
removed_format = ctx.SprintFunc(fmt.Sprintf("bg=%s", conf.Removed_bg.AsRGBSharp())) removed_format = ctx.SprintFunc(fmt.Sprintf("bg=%s", conf.Removed_bg.AsRGBSharp()))
removed_margin_format = ctx.SprintFunc(fmt.Sprintf("fg=%s bg=%s", conf.Margin_fg.AsRGBSharp(), conf.Removed_margin_bg.AsRGBSharp())) removed_margin_format = ctx.SprintFunc(fmt.Sprintf("fg=%s bg=%s", conf.Margin_fg.AsRGBSharp(), conf.Removed_margin_bg.AsRGBSharp()))
title_format = ctx.SprintFunc(fmt.Sprintf("fg=%s bg=%s", conf.Title_fg.AsRGBSharp(), conf.Title_bg.AsRGBSharp())) title_format = ctx.SprintFunc(fmt.Sprintf("fg=%s bg=%s bold", conf.Title_fg.AsRGBSharp(), conf.Title_bg.AsRGBSharp()))
margin_format = ctx.SprintFunc(fmt.Sprintf("fg=%s bg=%s", conf.Margin_fg.AsRGBSharp(), conf.Margin_bg.AsRGBSharp())) margin_format = ctx.SprintFunc(fmt.Sprintf("fg=%s bg=%s", conf.Margin_fg.AsRGBSharp(), conf.Margin_bg.AsRGBSharp()))
hunk_format = ctx.SprintFunc(fmt.Sprintf("fg=%s bg=%s", conf.Margin_fg.AsRGBSharp(), conf.Hunk_bg.AsRGBSharp())) hunk_format = ctx.SprintFunc(fmt.Sprintf("fg=%s bg=%s", conf.Margin_fg.AsRGBSharp(), conf.Hunk_bg.AsRGBSharp()))
hunk_margin_format = ctx.SprintFunc(fmt.Sprintf("fg=%s bg=%s", conf.Margin_fg.AsRGBSharp(), conf.Hunk_margin_bg.AsRGBSharp())) hunk_margin_format = ctx.SprintFunc(fmt.Sprintf("fg=%s bg=%s", conf.Margin_fg.AsRGBSharp(), conf.Hunk_margin_bg.AsRGBSharp()))
@ -90,11 +90,11 @@ func title_lines(left_path, right_path string, columns, margin_size int, ans []*
} else { } else {
name = place_in(m+sanitize(left_name), columns) name = place_in(m+sanitize(left_name), columns)
} }
ll := LogicalLine{columns: columns, margin_size: margin_size, line_type: TITLE_LINE, src: Reference{path: left_path, linenum: 0}} ll := LogicalLine{line_type: TITLE_LINE, src: Reference{path: left_path, linenum: 0}}
l1 := ll l1 := ll
l1.screen_lines = []string{title_format(name)} l1.screen_lines = []string{title_format(name)}
l2 := ll l2 := ll
l2.screen_lines = []string{title_format(name)} l2.screen_lines = []string{title_format(strings.Repeat("━", columns+1))}
return append(ans, &l1, &l2) return append(ans, &l1, &l2)
} }
@ -116,8 +116,13 @@ func render(collection *Collection, diff_map map[string]*Patch, columns int) (*L
}) })
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}
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() {
el := empty_line
ans = append(ans, &el)
}()
is_binary := !is_path_text(path) is_binary := !is_path_text(path)
if !is_binary && item_type == `diff` && !is_path_text(changed_path) { if !is_binary && item_type == `diff` && !is_path_text(changed_path) {

View File

@ -170,9 +170,29 @@ func (self *Handler) draw_screen() {
g := (&graphics.GraphicsCommand{}).SetAction(graphics.GRT_action_delete).SetDelete(graphics.GRT_delete_visible) g := (&graphics.GraphicsCommand{}).SetAction(graphics.GRT_action_delete).SetDelete(graphics.GRT_delete_visible)
g.WriteWithPayloadToLoop(self.lp, nil) g.WriteWithPayloadToLoop(self.lp, nil)
lp.MoveCursorTo(1, 1) lp.MoveCursorTo(1, 1)
lp.ClearToEndOfScreen()
if self.logical_lines == nil || self.diff_map == nil || self.collection == nil { if self.logical_lines == nil || self.diff_map == nil || self.collection == nil {
lp.Println(`Calculating diff, please wait...`) lp.Println(`Calculating diff, please wait...`)
return 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 {
break
}
screen_lines := line.screen_lines
if i == 0 {
screen_lines = screen_lines[self.scroll_pos.screen_line:]
}
for _, sl := range screen_lines {
lp.QueueWriteString(sl)
lp.MoveCursorVertically(1)
lp.QueueWriteString("\r")
num_written++
if num_written >= self.screen_size.num_lines {
break
}
}
}
} }

View File

@ -389,7 +389,7 @@ const (
FOREGROUND = 10 FOREGROUND = 10
CURSOR = 12 CURSOR = 12
SELECTION_BG = 17 SELECTION_BG = 17
SELECTION_FG = 18 SELECTION_FG = 19
) )
func (self *Loop) SetDefaultColor(which DefaultColor, val style.RGBA) { func (self *Loop) SetDefaultColor(which DefaultColor, val style.RGBA) {