Este artículo del blog explora el concepto de 'terminal pagers' y cómo el autor los ha implementado en sus aplicaciones de interfaz de usuario en la terminal (TUIs). En esencia, un terminal pager es un programa que permite navegar interactivamente a través de grandes bloques de texto que exceden la altura de la ventana de la terminal. Esto es crucial porque los desarrolladores a menudo trabajan con grandes cantidades de texto en la terminal, como logs de aplicaciones, diffs de Git, páginas de manuales y resultados de consultas a bases de datos.
Tradicionalmente, los programas como git y man utilizan la variable de entorno PAGER para determinar qué programa usar para mostrar texto que no cabe en la pantalla. less es el pager por defecto en la mayoría de los sistemas, y ofrece características como búsqueda, scrollback y opciones de configuración avanzadas (como persistir el texto al salir o realizar búsquedas sin distinción entre mayúsculas y minúsculas). Sin embargo, el autor buscaba una solución más reutilizable para sus TUIs, que son aplicaciones que emulan interfaces de escritorio dentro de la terminal.
Las TUIs, como kl (una herramienta para interactuar con logs de Kubernetes), a menudo necesitan mostrar grandes cantidades de texto en ventanas separadas. El autor creó un componente viewport en Go para manejar esta funcionalidad, que proporciona características como scroll, búsqueda, resaltado de texto con códigos ANSI, soporte para Unicode y rendimiento eficiente incluso con grandes volúmenes de datos. Este componente viewport se compone de tres módulos principales: item (que representa una línea de texto), viewport (que muestra los items y permite la navegación) y filterableviewport (que añade funcionalidad de búsqueda). El autor proporciona ejemplos de código para probar el filterableviewport directamente, tanto con Go instalado como a través de Docker.
En resumen, el artículo describe la importancia de los terminal pagers, explica cómo funcionan y cómo el autor ha creado un componente reutilizable para facilitar su implementación en aplicaciones de interfaz de usuario en la terminal, mejorando la experiencia del usuario al trabajar con grandes cantidades de texto en la terminal.
