2.8 KiB
2.8 KiB
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_terminalcomo 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+Cpara copiar selección,Ctrl+Shift+Vpara 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 sobrealacritty_terminal. Maneja el PTY, el event loop y el estado de la terminal.src/renderer.rs: Frontend gráfico conwinit+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=glo un driver de software comolavapipe.