From 9ea2787ba266216068c4526bd252f1274c796564 Mon Sep 17 00:00:00 2001 From: Eric Rumsey Date: Mon, 19 May 2025 15:31:32 -0500 Subject: [PATCH] Add dynamic ANSI buffer codes --- src/lib/util/ansi.ts | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/src/lib/util/ansi.ts b/src/lib/util/ansi.ts index df0bd52..475223f 100644 --- a/src/lib/util/ansi.ts +++ b/src/lib/util/ansi.ts @@ -88,6 +88,8 @@ export const ANSI_BUFFERS = { GET_CURSOR_POSITION: encoder.encode(ANSI.GET_CURSOR_POSITION), SAVE_CURSOR: encoder.encode(ANSI.SAVE_CURSOR), RESTORE_CURSOR: encoder.encode(ANSI.RESTORE_CURSOR), + + // Screen Control CLEAR_SCREEN: encoder.encode(ANSI.CLEAR_SCREEN), CLEAR_LINE: encoder.encode(ANSI.CLEAR_LINE), CLEAR_TO_END: encoder.encode(ANSI.CLEAR_TO_END), @@ -95,10 +97,19 @@ export const ANSI_BUFFERS = { CLEAR_BELOW: encoder.encode(ANSI.CLEAR_BELOW), }; +export const ANSI_DYNAMIC = { + // Cursor Control + CURSOR_TO: (x: number, y: number) => encoder.encode(ANSI.CURSOR_TO(x, y)), + CURSOR_UP: (x = 1) => encoder.encode(ANSI.CURSOR_UP(x)), + CURSOR_DOWN: (x = 1) => encoder.encode(ANSI.CURSOR_DOWN(x)), + CURSOR_FORWARD: (x = 1) => encoder.encode(ANSI.CURSOR_FORWARD(x)), + CURSOR_BACK: (x = 1) => encoder.encode(ANSI.CURSOR_BACK(x)), +}; + type AnsiBufferKey = keyof typeof ANSI_BUFFERS; export async function writeAnsi( - codes: AnsiBufferKey[], + codes: (AnsiBufferKey | Uint8Array)[], text?: string, autoReset: boolean = true ): Promise> { @@ -106,7 +117,11 @@ export async function writeAnsi( // Add requested ANSI codes for (const code of codes) { - buffers.push(ANSI_BUFFERS[code]); + if (code instanceof Uint8Array) { + buffers.push(code); + } else { + buffers.push(ANSI_BUFFERS[code]); + } } // Add optional text