scroll/src/common/ansi.ts

43 lines
1001 B
JavaScript

export const ANSI_PREFIX = '\x1b[';
function esc(pieces: TemplateStringsArray): string {
return ANSI_PREFIX + pieces[0];
}
/**
* ANSI escapes for various inputs
*/
export enum KeyCommand {
ArrowUp = ANSI_PREFIX + 'A',
ArrowDown = ANSI_PREFIX + 'B',
ArrowRight = ANSI_PREFIX + 'C',
ArrowLeft = ANSI_PREFIX + 'D',
PageUp = ANSI_PREFIX + '5~',
PageDown = ANSI_PREFIX + '6~',
Delete = ANSI_PREFIX + '3~',
// These keys have several possible escape sequences
Home = 'LineHome',
End = 'LineEnd',
}
export const Ansi = {
ClearLine: esc`K`,
ClearScreen: esc`2J`,
ResetCursor: esc`H`,
HideCursor: esc`?25l`,
ShowCursor: esc`?25h`,
GetCursorLocation: esc`6n`,
moveCursor: function moveCursor(row: number, col: number): string {
// Convert to 1-based counting
row++;
col++;
return ANSI_PREFIX + `${row};${col}H`;
},
moveCursorForward: (col: number): string => ANSI_PREFIX + `${col}C`,
moveCursorDown: (row: number): string => ANSI_PREFIX + `${row}B`,
};
export default Ansi;