@@ -149,6 +149,9 @@ func (dv *DiffView) String() string {
149 if dv.width > 0 {
149 if dv.width > 0 {
150 style = style.MaxWidth(dv.width)
150 style = style.MaxWidth(dv.width)
153+ style = style.MaxHeight(dv.height)
153 switch dv.layout {
156 switch dv.layout {
154 case layoutUnified:
157 case layoutUnified:
@@ -287,6 +290,7 @@ func (dv *DiffView) renderUnified() string {
287 var b strings.Builder
290 var b strings.Builder
289 fullContentStyle := lipgloss.NewStyle().MaxWidth(dv.fullCodeWidth)
292 fullContentStyle := lipgloss.NewStyle().MaxWidth(dv.fullCodeWidth)
291 for _, h := range dv.unified.Hunks {
295 for _, h := range dv.unified.Hunks {
292 if dv.lineNumbers {
296 if dv.lineNumbers {
@@ -296,6 +300,7 @@ func (dv *DiffView) renderUnified() string {
296 content := ansi.Truncate(dv.hunkLineFor(h), dv.fullCodeWidth, "…")
300 content := ansi.Truncate(dv.hunkLineFor(h), dv.fullCodeWidth, "…")
297 b.WriteString(dv.style.DividerLine.Code.Width(dv.fullCodeWidth).Render(content))
301 b.WriteString(dv.style.DividerLine.Code.Width(dv.fullCodeWidth).Render(content))
298 b.WriteRune('\n')
302 b.WriteRune('\n')
300 beforeLine := h.FromLine
305 beforeLine := h.FromLine
301 afterLine := h.ToLine
306 afterLine := h.ToLine
@@ -337,7 +342,19 @@ func (dv *DiffView) renderUnified() string {
337 beforeLine++
342 beforeLine++
339 b.WriteRune('\n')
344 b.WriteRune('\n')
350+ for printedLines < dv.height {
352+ b.WriteString(dv.style.MissingLine.LineNumber.Render(pad(" ", dv.beforeNumDigits)))
353+ b.WriteString(dv.style.MissingLine.LineNumber.Render(pad(" ", dv.afterNumDigits)))
355+ b.WriteString(dv.style.MissingLine.Code.Width(dv.fullCodeWidth).Render(" "))
343 return b.String()
360 return b.String()
@@ -349,6 +366,7 @@ func (dv *DiffView) renderSplit() string {
350 beforeFullContentStyle := lipgloss.NewStyle().MaxWidth(dv.fullCodeWidth)
367 beforeFullContentStyle := lipgloss.NewStyle().MaxWidth(dv.fullCodeWidth)
351 afterFullContentStyle := lipgloss.NewStyle().MaxWidth(dv.fullCodeWidth + btoi(dv.extraColOnAfter))
368 afterFullContentStyle := lipgloss.NewStyle().MaxWidth(dv.fullCodeWidth + btoi(dv.extraColOnAfter))
353 for i, h := range dv.splitHunks {
371 for i, h := range dv.splitHunks {
354 if dv.lineNumbers {
372 if dv.lineNumbers {
@@ -361,6 +379,7 @@ func (dv *DiffView) renderSplit() string {
362 b.WriteString(dv.style.DividerLine.Code.Width(dv.fullCodeWidth + btoi(dv.extraColOnAfter)).Render(" "))
380 b.WriteString(dv.style.DividerLine.Code.Width(dv.fullCodeWidth + btoi(dv.extraColOnAfter)).Render(" "))
363 b.WriteRune('\n')
381 b.WriteRune('\n')
365 beforeLine := h.fromLine
384 beforeLine := h.fromLine
366 afterLine := h.toLine
385 afterLine := h.toLine
@@ -432,9 +451,24 @@ func (dv *DiffView) renderSplit() string {
434 b.WriteRune('\n')
453 b.WriteRune('\n')
459+ for printedLines < dv.height {
461+ b.WriteString(dv.style.MissingLine.LineNumber.Render(pad("…", dv.beforeNumDigits)))
463+ b.WriteString(dv.style.MissingLine.Code.Width(dv.fullCodeWidth).Render(" "))
465+ b.WriteString(dv.style.MissingLine.LineNumber.Render(pad("…", dv.afterNumDigits)))
467+ b.WriteString(dv.style.MissingLine.Code.Width(dv.fullCodeWidth + btoi(dv.extraColOnAfter)).Render(" "))
438 return b.String()
472 return b.String()