Files
2026-07-12 18:41:05 -04:00

49 lines
1.8 KiB
Go

// Package terminal provides direct ANSI terminal control with zero-alloc rendering.
//
// # Features
//
// - True color (24-bit) and 256-color palette support
// - Double-buffered output with cell-level diffing
// - Raw stdin input parsing with escape sequence handling
// - Resize detection (SIGWINCH on Unix, callback on WASM)
// - Clean terminal restoration on exit/panic
//
// # Platform Support
//
// The package uses build tags to separate platform-specific code:
//
// - unix: Native terminal via termios, unix.Poll, SIGWINCH
// - wasm: Browser terminal via xterm.js JavaScript bridge
//
// # Architecture
//
// The Backend interface abstracts platform-specific operations:
//
// Backend (interface)
// ├── unixBackend (//go:build unix) - termios, raw I/O, signals
// └── wasmBackend (//go:build wasm) - syscall/js, callbacks
//
// Shared code (no build tags): Terminal interface, cell diffing, ANSI generation,
// escape sequence parsing, service lifecycle.
//
// # WASM Integration
//
// WASM builds require JavaScript glue exposing these globals:
//
// goTerminalWrite(Uint8Array) // Go → JS: terminal output
// goTerminalInput(Uint8Array) // JS → Go: keyboard input
// goTerminalResize(cols, rows) // JS → Go: terminal resize
// xterm.cols, xterm.rows // Initial size query
//
// # Performance
//
// Output uses 128KB buffered writer with cell-level diffing. Only changed cells
// generate ANSI sequences. Style attributes are coalesced to minimize SGR calls.
// Input parsing is zero-allocation for common cases.
//
// This package bypasses terminfo/termcap entirely, emitting direct ANSI sequences.
// Target environments: Linux, macOS, BSDs with xterm-compatible terminals, and
// modern browsers with xterm.js.
package terminal