mirror of
https://github.com/kovidgoyal/kitty
synced 2026-07-18 14:34:52 +02:00
committed by
Kovid Goyal
parent
c78592174d
commit
f45345c7a7
@@ -40,6 +40,7 @@ type HalfScreenLine struct {
|
||||
marked_up_margin_text string
|
||||
marked_up_text string
|
||||
is_filler bool
|
||||
is_moved bool
|
||||
cached_wcswidth int
|
||||
}
|
||||
|
||||
@@ -81,6 +82,9 @@ func (self *LogicalLine) render_screen_line(n int, lp *loop.Loop, margin_size, c
|
||||
if sl.left.is_filler {
|
||||
left_margin = format_as_sgr.margin_filler + left_margin
|
||||
left_text = format_as_sgr.filler + left_text
|
||||
} else if sl.left.is_moved {
|
||||
left_margin = format_as_sgr.moved_margin + left_margin
|
||||
left_text = format_as_sgr.moved + left_text
|
||||
} else {
|
||||
switch self.line_type {
|
||||
case CHANGE_LINE, IMAGE_LINE:
|
||||
@@ -104,6 +108,9 @@ func (self *LogicalLine) render_screen_line(n int, lp *loop.Loop, margin_size, c
|
||||
if sl.right.is_filler {
|
||||
right_margin = format_as_sgr.margin_filler + right_margin
|
||||
right_text = format_as_sgr.filler + right_text
|
||||
} else if sl.right.is_moved {
|
||||
right_margin = format_as_sgr.moved_margin + right_margin
|
||||
right_text = format_as_sgr.moved + right_text
|
||||
} else {
|
||||
switch self.line_type {
|
||||
case CHANGE_LINE, IMAGE_LINE:
|
||||
@@ -156,7 +163,7 @@ func place_in(text string, sz int) string {
|
||||
}
|
||||
|
||||
var format_as_sgr struct {
|
||||
title, margin, added, removed, added_margin, removed_margin, filler, margin_filler, hunk_margin, hunk, selection, search string
|
||||
title, margin, added, removed, added_margin, removed_margin, filler, margin_filler, hunk_margin, hunk, selection, search, moved, moved_margin string
|
||||
}
|
||||
|
||||
var statusline_format, added_count_format, removed_count_format, message_format func(...any) string
|
||||
@@ -175,6 +182,8 @@ type ResolvedColors struct {
|
||||
Margin_bg style.RGBA
|
||||
Margin_fg style.RGBA
|
||||
Margin_filler_bg style.NullableColor
|
||||
Moved_bg style.RGBA
|
||||
Moved_margin_bg style.RGBA
|
||||
Removed_bg style.RGBA
|
||||
Removed_margin_bg style.RGBA
|
||||
Search_bg style.RGBA
|
||||
@@ -202,6 +211,8 @@ func create_formatters() {
|
||||
rc.Margin_bg = conf.Dark_margin_bg
|
||||
rc.Margin_fg = conf.Dark_margin_fg
|
||||
rc.Margin_filler_bg = conf.Dark_margin_filler_bg
|
||||
rc.Moved_bg = conf.Dark_moved_bg
|
||||
rc.Moved_margin_bg = conf.Dark_moved_margin_bg
|
||||
rc.Removed_bg = conf.Dark_removed_bg
|
||||
rc.Removed_margin_bg = conf.Dark_removed_margin_bg
|
||||
rc.Search_bg = conf.Dark_search_bg
|
||||
@@ -223,6 +234,8 @@ func create_formatters() {
|
||||
rc.Margin_bg = conf.Margin_bg
|
||||
rc.Margin_fg = conf.Margin_fg
|
||||
rc.Margin_filler_bg = conf.Margin_filler_bg
|
||||
rc.Moved_bg = conf.Moved_bg
|
||||
rc.Moved_margin_bg = conf.Moved_margin_bg
|
||||
rc.Removed_bg = conf.Removed_bg
|
||||
rc.Removed_margin_bg = conf.Removed_margin_bg
|
||||
rc.Search_bg = conf.Search_bg
|
||||
@@ -248,6 +261,8 @@ func create_formatters() {
|
||||
format_as_sgr.added_margin = only_open(fmt.Sprintf("fg=%s bg=%s", rc.Margin_fg.AsRGBSharp(), rc.Added_margin_bg.AsRGBSharp()))
|
||||
format_as_sgr.removed = only_open("bg=" + rc.Removed_bg.AsRGBSharp())
|
||||
format_as_sgr.removed_margin = only_open(fmt.Sprintf("fg=%s bg=%s", rc.Margin_fg.AsRGBSharp(), rc.Removed_margin_bg.AsRGBSharp()))
|
||||
format_as_sgr.moved = only_open("bg=" + rc.Moved_bg.AsRGBSharp())
|
||||
format_as_sgr.moved_margin = only_open(fmt.Sprintf("fg=%s bg=%s", rc.Margin_fg.AsRGBSharp(), rc.Moved_margin_bg.AsRGBSharp()))
|
||||
format_as_sgr.title = only_open(fmt.Sprintf("fg=%s bg=%s bold", rc.Title_fg.AsRGBSharp(), rc.Title_bg.AsRGBSharp()))
|
||||
format_as_sgr.margin = only_open(fmt.Sprintf("fg=%s bg=%s", rc.Margin_fg.AsRGBSharp(), rc.Margin_bg.AsRGBSharp()))
|
||||
format_as_sgr.hunk = only_open(fmt.Sprintf("fg=%s bg=%s", rc.Margin_fg.AsRGBSharp(), rc.Hunk_bg.AsRGBSharp()))
|
||||
@@ -532,7 +547,9 @@ type DiffData struct {
|
||||
left_path, right_path string
|
||||
available_cols, margin_size int
|
||||
|
||||
left_lines, right_lines []string
|
||||
left_lines, right_lines []string
|
||||
left_moved_lines *utils.Set[int]
|
||||
right_moved_lines *utils.Set[int]
|
||||
}
|
||||
|
||||
func hunk_title(hunk *Hunk) string {
|
||||
@@ -567,7 +584,7 @@ func splitlines(text string, width int) []string {
|
||||
return style.WrapTextAsLines(text, width, style.WrapOptions{})
|
||||
}
|
||||
|
||||
func render_half_line(line_number int, line, ltype string, available_cols int, center Center, ans []HalfScreenLine) []HalfScreenLine {
|
||||
func render_half_line(line_number int, line, ltype string, available_cols int, center Center, is_moved bool, ans []HalfScreenLine) []HalfScreenLine {
|
||||
var regions []Region
|
||||
if ltype == "remove" {
|
||||
regions = center.left_regions
|
||||
@@ -583,7 +600,7 @@ func render_half_line(line_number int, line, ltype string, available_cols int, c
|
||||
}
|
||||
lnum := strconv.Itoa(line_number + 1)
|
||||
for _, sc := range splitlines(line, available_cols) {
|
||||
ans = append(ans, HalfScreenLine{marked_up_margin_text: lnum, marked_up_text: sc})
|
||||
ans = append(ans, HalfScreenLine{marked_up_margin_text: lnum, marked_up_text: sc, is_moved: is_moved})
|
||||
lnum = ""
|
||||
}
|
||||
return ans
|
||||
@@ -601,13 +618,15 @@ func lines_for_diff_chunk(data *DiffData, _ int, chunk *Chunk, _ int, ans []*Log
|
||||
}
|
||||
if i < chunk.left_count {
|
||||
left_lnum = chunk.left_start + i
|
||||
ll = render_half_line(left_lnum, data.left_lines[left_lnum], "remove", data.available_cols, center, ll)
|
||||
left_is_moved := data.left_moved_lines != nil && data.left_moved_lines.Has(left_lnum)
|
||||
ll = render_half_line(left_lnum, data.left_lines[left_lnum], "remove", data.available_cols, center, left_is_moved, ll)
|
||||
left_lnum++
|
||||
}
|
||||
|
||||
if i < chunk.right_count {
|
||||
right_lnum = chunk.right_start + i
|
||||
rl = render_half_line(right_lnum, data.right_lines[right_lnum], "add", data.available_cols, center, rl)
|
||||
right_is_moved := data.right_moved_lines != nil && data.right_moved_lines.Has(right_lnum)
|
||||
rl = render_half_line(right_lnum, data.right_lines[right_lnum], "add", data.available_cols, center, right_is_moved, rl)
|
||||
right_lnum++
|
||||
}
|
||||
|
||||
@@ -663,7 +682,10 @@ func lines_for_diff(left_path string, right_path string, patch *Patch, columns,
|
||||
return append(ans, &ht), nil
|
||||
}
|
||||
available_cols := columns/2 - margin_size
|
||||
data := DiffData{left_path: left_path, right_path: right_path, available_cols: available_cols, margin_size: margin_size}
|
||||
data := DiffData{
|
||||
left_path: left_path, right_path: right_path, available_cols: available_cols, margin_size: margin_size,
|
||||
left_moved_lines: patch.left_moved_lines, right_moved_lines: patch.right_moved_lines,
|
||||
}
|
||||
if left_path != "" {
|
||||
data.left_lines, err = highlighted_lines_for_path(left_path)
|
||||
if err != nil {
|
||||
@@ -720,7 +742,7 @@ func all_lines(path string, columns, margin_size int, is_add bool, ans []*Logica
|
||||
}
|
||||
for line_number, line := range lines {
|
||||
hlines := make([]HalfScreenLine, 0, 8)
|
||||
hlines = render_half_line(line_number, line, ltype, available_cols, Center{}, hlines)
|
||||
hlines = render_half_line(line_number, line, ltype, available_cols, Center{}, false, hlines)
|
||||
l := ll
|
||||
if is_add {
|
||||
l.right_reference.linenum = line_number + 1
|
||||
|
||||
Reference in New Issue
Block a user