/** DEC private-mode sequences (`CSI ? N h` / `CSI ? N l`). */ import { csi } from './csi.js' /** DEC private mode numbers we care about. */ export const DEC = { CURSOR_VISIBLE: 25, ALT_SCREEN: 47, ALT_SCREEN_CLEAR: 1049, MOUSE_NORMAL: 1000, MOUSE_BUTTON: 1002, MOUSE_ANY: 1003, MOUSE_SGR: 1006, FOCUS_EVENTS: 1004, BRACKETED_PASTE: 2004, SYNCHRONIZED_UPDATE: 2026, } as const /** Build a set-private-mode sequence: `CSI ? N h`. */ export function decset(mode: number): string { return csi(`?${mode}h`) } /** Build a reset-private-mode sequence: `CSI ? N l`. */ export function decreset(mode: number): string { return csi(`?${mode}l`) } // Pre-generated sequences for the modes the renderer toggles every frame. // Computing them once at module load saves the `csi` allocation per write. export const BSU = decset(DEC.SYNCHRONIZED_UPDATE) export const ESU = decreset(DEC.SYNCHRONIZED_UPDATE) export const EBP = decset(DEC.BRACKETED_PASTE) export const DBP = decreset(DEC.BRACKETED_PASTE) export const EFE = decset(DEC.FOCUS_EVENTS) export const DFE = decreset(DEC.FOCUS_EVENTS) export const SHOW_CURSOR = decset(DEC.CURSOR_VISIBLE) export const HIDE_CURSOR = decreset(DEC.CURSOR_VISIBLE) export const ENTER_ALT_SCREEN = decset(DEC.ALT_SCREEN_CLEAR) export const EXIT_ALT_SCREEN = decreset(DEC.ALT_SCREEN_CLEAR) /** Mouse tracking enable bundle. */ export const ENABLE_MOUSE_TRACKING = decset(DEC.MOUSE_NORMAL) + decset(DEC.MOUSE_BUTTON) + decset(DEC.MOUSE_ANY) + decset(DEC.MOUSE_SGR) export const DISABLE_MOUSE_TRACKING = decreset(DEC.MOUSE_SGR) + decreset(DEC.MOUSE_ANY) + decreset(DEC.MOUSE_BUTTON) + decreset(DEC.MOUSE_NORMAL)