Files
vt220-emulator/README.md

60 lines
2.8 KiB
Markdown

# 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
```bash
cd vt220-emulator
cargo build --release
```
## Ejecución
```bash
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`.