Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 2556e01

Browse files
authored
fix: getting last rendered line counts including alt screen lines (charmbracelet#1254)
* get last rendered line counts including alt screen lines * update the comment
1 parent 7dc1e85 commit 2556e01

File tree

1 file changed

+16
-12
lines changed

1 file changed

+16
-12
lines changed

standard_renderer.go

Lines changed: 16 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -258,13 +258,8 @@ func (r *standardRenderer) flush() {
258258
}
259259
}
260260

261-
lastLinesRendered := r.linesRendered
262-
if r.altScreenActive {
263-
lastLinesRendered = r.altLinesRendered
264-
}
265-
266261
// Clearing left over content from last render.
267-
if lastLinesRendered > len(newLines) {
262+
if r.lastLinesRendered() > len(newLines) {
268263
buf.WriteString(ansi.EraseScreenBelow)
269264
}
270265

@@ -295,6 +290,14 @@ func (r *standardRenderer) flush() {
295290
r.buf.Reset()
296291
}
297292

293+
// lastLinesRendered returns the number of lines rendered lastly.
294+
func (r *standardRenderer) lastLinesRendered() int {
295+
if r.altScreenActive {
296+
return r.altLinesRendered
297+
}
298+
return r.linesRendered
299+
}
300+
298301
// write writes to the internal buffer. The buffer will be outputted via the
299302
// ticker which calls flush().
300303
func (r *standardRenderer) write(s string) {
@@ -507,7 +510,7 @@ func (r *standardRenderer) setWindowTitle(title string) {
507510
func (r *standardRenderer) setIgnoredLines(from int, to int) {
508511
// Lock if we're going to be clearing some lines since we don't want
509512
// anything jacking our cursor.
510-
if r.linesRendered > 0 {
513+
if r.lastLinesRendered() > 0 {
511514
r.mtx.Lock()
512515
defer r.mtx.Unlock()
513516
}
@@ -520,16 +523,17 @@ func (r *standardRenderer) setIgnoredLines(from int, to int) {
520523
}
521524

522525
// Erase ignored lines
523-
if r.linesRendered > 0 {
526+
lastLinesRendered := r.lastLinesRendered()
527+
if lastLinesRendered > 0 {
524528
buf := &bytes.Buffer{}
525529

526-
for i := r.linesRendered - 1; i >= 0; i-- {
530+
for i := lastLinesRendered - 1; i >= 0; i-- {
527531
if _, exists := r.ignoreLines[i]; exists {
528532
buf.WriteString(ansi.EraseEntireLine)
529533
}
530534
buf.WriteString(ansi.CursorUp1)
531535
}
532-
buf.WriteString(ansi.SetCursorPosition(0, r.linesRendered)) // put cursor back
536+
buf.WriteString(ansi.SetCursorPosition(0, lastLinesRendered)) // put cursor back
533537
_, _ = r.out.Write(buf.Bytes())
534538
}
535539
}
@@ -575,7 +579,7 @@ func (r *standardRenderer) insertTop(lines []string, topBoundary, bottomBoundary
575579
buf.WriteString(ansi.SetScrollingRegion(0, r.height))
576580

577581
// Move cursor back to where the main rendering routine expects it to be
578-
buf.WriteString(ansi.SetCursorPosition(0, r.linesRendered))
582+
buf.WriteString(ansi.SetCursorPosition(0, r.lastLinesRendered()))
579583

580584
_, _ = r.out.Write(buf.Bytes())
581585
}
@@ -604,7 +608,7 @@ func (r *standardRenderer) insertBottom(lines []string, topBoundary, bottomBound
604608
buf.WriteString(ansi.SetScrollingRegion(0, r.height))
605609

606610
// Move cursor back to where the main rendering routine expects it to be
607-
buf.WriteString(ansi.SetCursorPosition(0, r.linesRendered))
611+
buf.WriteString(ansi.SetCursorPosition(0, r.lastLinesRendered()))
608612

609613
_, _ = r.out.Write(buf.Bytes())
610614
}

0 commit comments

Comments
 (0)