@@ -49,7 +49,8 @@ type DiffView struct {
49 splitHunks []splitHunk
49 splitHunks []splitHunk
51 codeWidth int
51 codeWidth int
52− fullCodeWidth int // with leading symbols
52+ fullCodeWidth int // with leading symbols
53+ extraColOnAfter bool // add extra column on after panel
53 beforeNumDigits int
54 beforeNumDigits int
54 afterNumDigits int
55 afterNumDigits int
@@ -144,11 +145,16 @@ func (dv *DiffView) String() string {
144 dv.resizeCodeWidth()
145 dv.resizeCodeWidth()
148+ style := lipgloss.NewStyle()
150+ style = style.MaxWidth(dv.width)
147 switch dv.layout {
153 switch dv.layout {
148 case layoutUnified:
154 case layoutUnified:
149− return dv.renderUnified()
155+ return style.Render(strings.TrimSuffix(dv.renderUnified(), "\n"))
150 case layoutSplit:
156 case layoutSplit:
151− return dv.renderSplit()
157+ return style.Render(strings.TrimSuffix(dv.renderSplit(), "\n"))
153 panic("unknown diffview layout")
159 panic("unknown diffview layout")
@@ -268,7 +274,9 @@ func (dv *DiffView) resizeCodeWidth() {
268 case layoutUnified:
274 case layoutUnified:
269 dv.codeWidth = dv.width - fullNumWidth - leadingSymbolsSize
275 dv.codeWidth = dv.width - fullNumWidth - leadingSymbolsSize
270 case layoutSplit:
276 case layoutSplit:
271− dv.codeWidth = (dv.width - fullNumWidth - leadingSymbolsSize*2) / 2
277+ remainingWidth := dv.width - fullNumWidth - leadingSymbolsSize*2
278+ dv.codeWidth = remainingWidth / 2
279+ dv.extraColOnAfter = isOdd(remainingWidth)
274 dv.fullCodeWidth = dv.codeWidth + leadingSymbolsSize
282 dv.fullCodeWidth = dv.codeWidth + leadingSymbolsSize
@@ -340,7 +348,7 @@ func (dv *DiffView) renderSplit() string {
340 if dv.lineNumbers {
348 if dv.lineNumbers {
341 b.WriteString(dv.style.DividerLine.LineNumber.Render(pad("…", dv.afterNumDigits)))
349 b.WriteString(dv.style.DividerLine.LineNumber.Render(pad("…", dv.afterNumDigits)))
343− b.WriteString(dv.style.DividerLine.Code.Width(dv.fullCodeWidth).Render(" "))
351+ b.WriteString(dv.style.DividerLine.Code.Width(dv.fullCodeWidth + btoi(dv.extraColOnAfter)).Render(" "))
344 b.WriteRune('\n')
352 b.WriteRune('\n')
346 beforeLine := h.fromLine
354 beforeLine := h.fromLine
@@ -355,7 +363,7 @@ func (dv *DiffView) renderSplit() string {
356 if l.after != nil {
364 if l.after != nil {
357 afterContent = strings.TrimSuffix(l.after.Content, "\n")
365 afterContent = strings.TrimSuffix(l.after.Content, "\n")
358− afterContent = ansi.Truncate(afterContent, dv.codeWidth, "…")
366+ afterContent = ansi.Truncate(afterContent, dv.codeWidth+btoi(dv.extraColOnAfter), "…")
@@ -384,19 +392,19 @@ func (dv *DiffView) renderSplit() string {
384 if dv.lineNumbers {
392 if dv.lineNumbers {
385 b.WriteString(dv.style.MissingLine.LineNumber.Render(pad(" ", dv.afterNumDigits)))
393 b.WriteString(dv.style.MissingLine.LineNumber.Render(pad(" ", dv.afterNumDigits)))
387− b.WriteString(dv.style.MissingLine.Code.Width(dv.fullCodeWidth).Render(" "))
395+ b.WriteString(dv.style.MissingLine.Code.Width(dv.fullCodeWidth + btoi(dv.extraColOnAfter)).Render(" "))
388 case l.after.Kind == udiff.Equal:
396 case l.after.Kind == udiff.Equal:
389 if dv.lineNumbers {
397 if dv.lineNumbers {
390 b.WriteString(dv.style.EqualLine.LineNumber.Render(pad(afterLine, dv.afterNumDigits)))
398 b.WriteString(dv.style.EqualLine.LineNumber.Render(pad(afterLine, dv.afterNumDigits)))
392− b.WriteString(dv.style.EqualLine.Code.Width(dv.fullCodeWidth).Render(" " + afterContent))
400+ b.WriteString(dv.style.EqualLine.Code.Width(dv.fullCodeWidth + btoi(dv.extraColOnAfter)).Render(" " + afterContent))
393 afterLine++
401 afterLine++
394 case l.after.Kind == udiff.Insert:
402 case l.after.Kind == udiff.Insert:
395 if dv.lineNumbers {
403 if dv.lineNumbers {
396 b.WriteString(dv.style.InsertLine.LineNumber.Render(pad(afterLine, dv.afterNumDigits)))
404 b.WriteString(dv.style.InsertLine.LineNumber.Render(pad(afterLine, dv.afterNumDigits)))
398 b.WriteString(dv.style.InsertLine.Symbol.Render("+ "))
406 b.WriteString(dv.style.InsertLine.Symbol.Render("+ "))
399− b.WriteString(dv.style.InsertLine.Code.Width(dv.codeWidth).Render(afterContent))
407+ b.WriteString(dv.style.InsertLine.Code.Width(dv.codeWidth + btoi(dv.extraColOnAfter)).Render(afterContent))
400 afterLine++
408 afterLine++