VT220 Emulator

Emulador de terminal tipo VT220 construido en Rust con soporte para múltiples ventanas, scrollback, copiar/pegar, colores ANSI y renderizado acelerado por GPU.

Características

  • Múltiples ventanas: Abre tantas terminales como necesites, cada una con su propio shell y estado independiente (similar a Wave CLI).
  • Emulación VT220 completa: Usa alacritty_terminal como motor de emulación, soportando la mayoría de secuencias de escape VT220/ANSI/XTERM.
  • Scrollback: 10,000 líneas de historial (configurable).
  • Copiar / Pegar: Ctrl+Shift+C para copiar selección, Ctrl+Shift+V para pegar desde el portapapeles del sistema.
  • Colores ANSI: Soporte para colores nombrados, indexados (256) y RGB de 24 bits.
  • Renderizado GPU: Usa wgpu + glyphon (cosmic-text) para renderizado de texto rápido y moderno.
  • Scroll con rueda del ratón: Permite desplazarse por el historial de la terminal.
  • Cursor invertido: El cursor se dibuja invirtiendo los colores de la celda actual.

Dependencias

  • Rust >= 1.70
  • Linux: librerías de desarrollo de X11/Wayland (libxcb-*, libwayland-dev, libxkbcommon-dev)
  • Una GPU compatible con Vulkan/Metal/DX12 o un renderer de software como lavapipe.

Compilación

cd vt220-emulator
cargo build --release

Ejecución

cargo run --release

El emulador abrirá una ventana de escritorio y lanzará el shell predeterminado del sistema ($SHELL).

Atajos de teclado

Atajo Acción
Ctrl+Shift+N Nueva ventana de terminal
Ctrl+Shift+C Copiar selección al portapapeles
Ctrl+Shift+V Pegar desde el portapapeles
Flechas Enviar códigos de cursor VT220 (ESC [ A/B/C/D)
PageUp / PageDown Enviar códigos correspondientes
MouseWheel Scrollback del historial

Arquitectura

  • src/terminal.rs: Wrapper sobre alacritty_terminal. Maneja el PTY, el event loop y el estado de la terminal.
  • src/renderer.rs: Frontend gráfico con winit + wgpu + glyphon. Convierte el estado de la grid de la terminal en líneas de texto renderizadas.
  • src/main.rs: Loop de eventos de winit, manejo de input de teclado/ratón, integración con clipboard y copiar/pegar.

Notas y limitaciones

  • Este es un MVP funcional. Algunas secuencias de escape muy específicas de VT220 pueden no estar soportadas dependiendo de la versión de alacritty_terminal.
  • La selección con mouse aún no está implementada (se puede agregar extendiendo el manejo de eventos de ratón).
  • El dibujado del fondo de cada celda usa el color de fondo de la terminal global, no por celda (para simplificar el renderizado). El color de primer plano sí es por celda.
  • En entornos sin GPU, puedes usar WGPU_BACKEND=gl o un driver de software como lavapipe.
Description
VT220 Emulator in Rust with multi-window support
Readme 58 KiB
Languages
Rust 100%