10 puntos por GN⁺ 22 일 전 | 1 comentarios | Compartir por WhatsApp
  • Un port open source que moderniza el framework de UI de texto de Borland de los 90 con soporte multiplataforma + Unicode
  • Al crear apps de terminal, no hace falta lidiar con la compatibilidad entre terminales: funciona con el mismo código en Linux, Windows y DOS
  • Ya incluye widgets de TUI como ventanas superpuestas redimensionables, menús desplegables, diálogos, botones, barras de desplazamiento, campos de entrada, casillas de verificación y botones de opción, así que se pueden usar directamente sin implementarlos desde cero
  • Soporte completo de Unicode UTF-8 — mantiene la API existente basada en char, pero aun así puede manejar caracteres CJK de ancho completo, caracteres combinados e incluso emoji; con una sola llamada a moveStr(), el desplazamiento y recorte multibyte se resuelven automáticamente
  • Aprovecha el soporte de setlocale UTF-8 del RTL de Microsoft para que código como std::ifstream f("コンピュータ.txt") funcione igual en Windows
  • Soporte de true color de 24 bits — se amplió de las 16 colores tradicionales a RGB, xterm-256 y colores predeterminados del terminal; si el terminal no lo soporta, convierte automáticamente al color más cercano
  • Soporta toda la entrada/salida moderna, incluyendo rueda del mouse, botón central, triple clic, tamaños de pantalla de hasta 32767 filas/columnas y eventos de redimensionamiento de ventana
  • Integración nativa con el portapapeles del sistema: en Windows/macOS funciona de inmediato, y en entornos remotos por SSH también permite copiar/pegar mediante X11 forwarding u códigos de escape OSC 52
  • El código fuente original de Turbo Vision de la época de Borland C++ se puede compilar prácticamente tal cual, con modificaciones mínimas
  • Soporta sistema de compilación CMake; con vcpkg, basta una línea ./vcpkg install tvision para instalarlo, y si se agrega add_subdirectory como submódulo de CMake, enlaza las dependencias automáticamente
  • Requiere C++14 o superior y libncursesw / licencia MIT

1 comentarios

 
GN⁺ 22 일 전
Opiniones de Hacker News
  • Me da mucho gusto ver que este repositorio llegó a la portada, y justo ahora estoy haciendo mi propio wrapper para este repositorio
    Estoy ejecutando Turbo Vision sobre .Net en macOS y se siente bastante mágico
    Estoy agregando una API de más alto nivel, además de envolver o mejorar la API de palette, que ya está bastante anticuada, y también estoy añadiendo layout
    Todavía estoy trabajando duro en un repositorio privado, y sigo puliéndolo poco a poco, como hoy ajustando la palette según la surface donde están colocados los controles y mañana afinando otra parte
    También me quedan pendientes cosas como ordenar el layout y agregar controles básicos que hoy en día se echan de menos
    Antes probé Terminal.Gui, pero como estaba en plena transición a v2, fue bastante difícil usarlo sin bugs, y Claude también mostró muy bien qué no se debe hacer cuando se crea una librería TUI sin tomar en cuenta un terminal real
    Así que justo estaba pensando que estaría bien tener una versión moderna de Turbo Vision, y entonces encontré este repositorio; ver que incluso incluye soporte para Unicode me hizo sentir muy agradecido

    • Oxygene es parte de la familia de productos Elements de RemObjects, así que además de Oxygene, que es de la línea Pascal, puedes mezclar varios lenguajes populares y llevarlos a Windows, macOS, Linux, Android, etc.
      https://www.remobjects.com/elements/oxygene/
      https://www.remobjects.com/elements/
    • Yo también he trabajado con este port de tvision, y cada vez que toco un framework TUI nuevo termino sintiendo que Turbo Vision es mejor
      Yo también estoy haciendo un wrapper para .NET, y aunque probablemente voy menos avanzado, quiero imitar lo más posible la API de Windows Forms e incluso meterle un diseñador TUI drag-and-drop
      Hay un ejemplo aquí: https://github.com/brianluft/terminalforms/tree/main/src/TerminalFormsDemo
      La mayor parte de la integración complicada del lado de C++ la resolví aquí: https://github.com/brianluft/terminalforms/tree/main/src/tfcore
      Exporté funciones C simples para poder llamarlas con P/Invoke, y del lado de C# me concentré sobre todo en estructurar las clases
      Al principio insistí en que todo lo que se pudiera hacer en C++ también se pudiera hacer en C#, pero se volvió demasiado complejo; incluso llegué al punto de meter objetos C++ dentro de buffers de C# usando placement new, prácticamente como si estuviera heredando clases de C++ desde C#, y ahí el diseño se vino abajo
      Al final cambié a un enfoque más directo, menos flexible pero mucho más simple, y decidí dejar la flexibilidad del lado de C#
      Me da curiosidad cómo armaste tu sistema de P/Invoke
    • Jugar con esta librería TV rasca muy bien la nostalgia y da gusto
      Gracias a eso creo que he evitado intentos inútiles como ponerme a hacer apps para GEOS o unirme al equipo unipersonal de Hurd
    • Yo también quería intentar lo mismo
      Sí probé Terminal.Gui, pero TV me atraía más, así que también había pensado en hacer un wrapper; de verdad me gustaría verlo cuando sea público
  • Mi carrera de programación empezó literalmente en la basura en los 90
    Encontré un libro de Turbo Vision que alguien había tirado, y me enamoré de inmediato de esa TUI azulada que cualquiera podía hacer

  • La versión original venía en Turbo Pascal 6, y el port a C++ salió después
    Así que esto vendría siendo un port moderno de un port
    Borland hacía algo parecido con otros frameworks: OWL también empezó primero del lado de Turbo Pascal for Windows 1.5, y buena parte de las herramientas de C++ Builder en realidad estaban hechas en Delphi
    Object Pascal de Turbo Pascal 5.5, y luego Turbo Vision en la 6, fueron mi entrada a la POO, y siento que tuve suerte de empezar por ahí
    Incluso en un entorno como MS-DOS, OOP y Turbo Vision te enseñaban muy bien las ventajas de un framework

    • Lo curioso es que Free Vision fue, en algún momento, el resultado de que alguien tomara la versión en C++ liberada al dominio público, la tradujera manualmente y la llevara de vuelta a Object/Free Pascal
    • OWL de verdad estaba adelantado a su tiempo
  • Cuando Borland sacó Turbo Pascal, Turbo C++ y TurboVision, sentí que de pronto se abría todo un universo de posibilidades
    El rendimiento de los compiladores era excelente y los manuales parecían obras de arte; ojalá todavía conservara esos libros
    Esto es puro tesoro cultural

    • Esos manuales eran realmente increíbles
      A inicios de los 90 aprendí C/C++ casi por mi cuenta leyendo nada más la pila de libros de Borland que venían con Turbo C++, y hoy cuesta hasta imaginar una escena donde alguien aprenda así solo con libros de referencia
    • Durante mucho tiempo Turbo Vision fue mi estándar de oro
      Los frameworks TUI nuevos siempre se sentían como si les faltara algo, y ahora voy a volver a usar esto para ver si era simple nostalgia o no
      Pienso meterlo en mi próxima herramienta, y de verdad quiero aplaudir mucho a quienes lo hicieron
    • Hubo una época en la que yo era Borland al 100%
      Fuera de GW-BASIC y MS-DOS, todo era Borland: Turbo BASIC, Turbo Pascal, Turbo C++ para MS-DOS y Windows 3.x, Turbo Vision y OWL
      Empecé a usar VC++ como por la versión 5, pero MFC siempre me pareció demasiado insípido comparado con los productos de Borland
      Incluso hoy, pocas cosas igualan de verdad la capacidad RAD de C++ Builder, y a .NET le tomó bastante tiempo ordenar una historia comparable para el código de bajo nivel y AOT al estilo Delphi
      Yo sí les pondría unas cuantas copias de Turbo Pascal 7 para MS-DOS y Delphi moderno en las manos a desarrolladores de Go, C++ y Rust
  • Turbo Vision 2.0 sigue siendo bastante práctico incluso hoy, tanto que yo mismo lo usé para un prototipo hace un año
    Intenté hacer un frontend de Turbo Vision para el depurador LLDB, para que funcionara como el Turbo Debugger de Borland, y en su mayor parte salió como quería
    Me sorprendió sentir que retomaba exactamente donde todo se había quedado en 199x, y hasta pude compilar y ejecutar código de 1993 sin mayores problemas
    También hay una versión mejorada del editor interno basada en Scintilla, con funciones como syntax highlighting, pero la parte que yo quería modificar no me salió bien, así que probablemente tendré que pedir ayuda al autor
    Eso sí, falta documentación en el sentido moderno de conocimiento compartido, así que no es fácil preguntarle a Stack Overflow o a una IA; me tocó aprender viendo ejemplos y releyendo varias veces algunos libros de Turbo Vision, a la vieja usanza
    El layout manual es bastante tedioso, así que estaría bien tener algo como el layout automático de Qt, y también extraño un poco los splitters, aunque no parecen difíciles de implementar
    Otra cosa que me sorprendió es que TV en realidad es bastante pequeño y compacto. En los 90 se sentía gigantesco
    En general, el trabajo de modernización está muy bien hecho, y a mí me gusta muchísimo

  • Ver tantas directivas de cmake me da ganas de volver al pasado
    En Turbo C o Pascal solo presionabas F9 y corría de inmediato
    Por otro lado, también siento que esto muestra la incompetencia de nuestra cadena de herramientas
    A estas alturas debería bastar con señalar un compilador en línea para ejecutarlo al instante, o descargarlo, abrir una carpeta y correrlo; pero se volvió más un ritual que una herramienta

    • En el Unix moderno, compilar software ya había sido un problema resuelto en algún momento
      ./configure && make && make install debería seguir siendo el estándar de oro
  • Este es solo uno de los ports/clones de Turbo Vision
    Del lado de C++ también está este: https://github.com/kloczek/tvision
    La versión incluida en FreePascal/Lazarus está escrita en Pascal, y también hay una en Rust que se ve medio vibe-coded: https://github.com/aovestdipaperino/turbo-vision-4-rust

  • Si corres esto en una terminal, se pierde un poco la sensación clave que daba el mouse en una pantalla de modo texto
    En una pantalla real de modo texto no se veía como un puntero de mouse, sino más bien como un bloque amarillo movido con el mouse
    Me pregunto si alguien lo ha probado en modo texto real de Linux de alta resolución con GPM

    • En esencia no era amarillo como tal
      Se mostraba invirtiendo el color de la celda que quedaba debajo, y como la ventana principal que llenaba casi toda la pantalla solía ser azul oscuro, muchas veces el resultado sí parecía un bloque amarillo brillante
  • Recomiendo un episodio reciente del podcast de Wookash sobre Chuck Jazdzewski
    Fue parte del equipo que creó Turbo Vision originalmente, y también hablan bastante de todo ese ecosistema

  • Yo todavía prefiero el verdadero Turbo Vision, o sea la versión en Pascal, sobre la de C++
    La de C++ al final se siente más como una traslación de la de Pascal
    Por ejemplo, en Pascal uses es una palabra clave, mientras que incluir módulos con #define se siente más como un hack
    Bueno, quizá hoy ya no sea una diferencia tan importante

    • Free Vision, incluido en Free Pascal, básicamente cumple ese papel
      El IDE en modo texto también usa Free Vision
      https://wiki.lazarus.freepascal.org/images/1/19/Userscreen.png
      Pero la diferencia clave es que Free Vision y Turbo Vision usan el tipo object de Turbo Pascal 5.5, no class de Delphi
      Con class es fácil implementar cosas como serialización automática gracias a RTTI, pero object no tiene eso, así que para distinguir tipos distintos en tiempo de ejecución hay que hacer serialización manual, por ejemplo registrando el puntero VMT que está en un offset fijo dentro del puntero al objeto
      Free Pascal sí le añadió a object algunas comodidades como private/protected/public y property, pero Free Vision no usa esas extensiones porque implementa la API original de Turbo Vision