diff --git a/src/Widget.ts b/src/Widget.ts index c84dc65..185960f 100644 --- a/src/Widget.ts +++ b/src/Widget.ts @@ -113,7 +113,9 @@ export abstract class Widget { export function redrawWidgetsSoon() { if (widgetLineCount) { writeToStderr( - ansi.eraseLine + (ansi.cursorUp(1) + ansi.eraseLine).repeat(widgetLineCount) + '\r' + '\u001B[?2026h' + + ansi.eraseLine + (ansi.cursorUp(1) + ansi.eraseLine).repeat(widgetLineCount) + '\r', + true, ); widgetLineCount = 0; redrawingThisTick = true; diff --git a/src/internal.ts b/src/internal.ts index 55d1ebe..3bb59b2 100644 --- a/src/internal.ts +++ b/src/internal.ts @@ -40,15 +40,21 @@ export function stringify(...data: any[]) { } let buffer = ''; +let bufferNeedsUnfreeze = false; let exiting = false; -export function writeToStderr(data: string) { +export function writeToStderr(data: string, needsUnfreeze = false) { buffer += data; if (exiting) flushStderr(); + if (needsUnfreeze) bufferNeedsUnfreeze = true; } export function flushStderr() { if (buffer) { + if (bufferNeedsUnfreeze) { + buffer += '\u001B[?2026l'; + bufferNeedsUnfreeze = false; + } writeSync(2, buffer); buffer = ''; }