- Port open-source yang memodernkan framework UI teks Borland era 90-an menjadi lintas platform + Unicode
- Saat membuat aplikasi terminal, tidak perlu menangani kompatibilitas terminal - berjalan dengan kode yang sama di Linux, Windows, dan DOS
- Widget TUI seperti jendela overlap yang bisa diubah ukurannya, menu pull-down, dialog, tombol, scrollbar, kotak input, checkbox, radio button sudah tertanam, jadi bisa langsung dipakai tanpa perlu implementasi sendiri
- Dukungan penuh Unicode UTF-8 — tetap mempertahankan API lama berbasis
char, tetapi tetap bisa menangani karakter lebar penuh CJK, karakter gabungan, hingga emoji, dan cukup dengan satu baris moveStr() penanganan scrolling dan pemotongan multibyte dilakukan otomatis
- Memanfaatkan dukungan UTF-8
setlocale dari Microsoft RTL sehingga kode seperti std::ifstream f("コンピュータ.txt") dapat berjalan apa adanya di Windows
- Dukungan true color 24-bit — diperluas dari 16 warna lama ke RGB, xterm-256, hingga warna bawaan terminal, dan jika terminal tidak mendukung maka otomatis dikuantisasi ke warna terdekat
- Mendukung seluruh input/output modern seperti mouse wheel, tombol tengah, triple click, ukuran layar hingga 32767 baris/kolom, dan event resize jendela
- Integrasi clipboard sistem sudah bawaan: Windows/macOS langsung berfungsi, dan di lingkungan remote SSH pun copy/paste bisa dilakukan lewat X11 forwarding atau escape code OSC 52
- Kode sumber Turbo Vision dari era Borland C++ lama bisa dibangun apa adanya dengan modifikasi minimal
- Mendukung sistem build CMake, instalasi selesai hanya dengan satu baris
./vcpkg install tvision via vcpkg, dan jika menambahkan add_subdirectory sebagai submodul CMake maka dependensi otomatis terhubung
- C++14 atau lebih baru, memerlukan libncursesw / lisensi MIT
1 komentar
Pendapat Hacker News
Senang sekali melihat repositori ini naik ke front page, dan sekarang saya sedang membuat wrapper sendiri untuk repositori ini
Saya menjalankan Turbo Vision di macOS di atas .NET, dan rasanya cukup ajaib
Saya sedang menambahkan API level lebih tinggi, membungkus atau memperbaiki palette API yang sudah cukup kuno, dan juga menambahkan layout
Masih dikerjakan intensif di repositori privat, dan saya terus mengutak-atiknya sedikit demi sedikit, misalnya hari ini menetapkan palette berdasarkan surface tempat kontrol diletakkan, lalu besok merapikan bagian lain
Masih ada pekerjaan seperti merapikan layout dan menambahkan kontrol dasar yang menurut standar sekarang terasa kurang
Saya juga pernah mencoba Terminal.Gui, tapi mungkin karena sedang transisi ke v2, cukup sulit dipakai tanpa bug, dan Claude juga menunjukkan dengan sangat baik hal-hal yang tidak boleh dilakukan saat membuat library TUI tanpa mempertimbangkan terminal sungguhan
Jadi saya memang sedang berharap ada Turbo Vision versi modern, lalu menemukan repositori ini, dan sangat berterima kasih melihat dukungan Unicode sudah masuk
https://www.remobjects.com/elements/oxygene/
https://www.remobjects.com/elements/
Saya juga sedang membuat wrapper .NET, mungkin progresnya belum sejauh itu, tetapi saya ingin meniru Windows Forms API semirip mungkin sekaligus menambahkan desainer TUI drag-and-drop
Contohnya ada di sini: https://github.com/brianluft/terminalforms/tree/main/src/TerminalFormsDemo
Sebagian besar pekerjaan integrasi C++ yang rumit saya tangani di sini: https://github.com/brianluft/terminalforms/tree/main/src/tfcore
Saya mengekspor fungsi-fungsi C sederhana agar bisa dipanggil lewat P/Invoke, lalu sisi C# bisa lebih fokus pada penataan struktur kelas
Awalnya saya memaksakan bahwa apa pun yang bisa dilakukan di C++ harus bisa dilakukan juga di C#, tetapi jadinya terlalu rumit, sampai sempat menaruh objek C++ ke dalam buffer C# dengan placement new, nyaris seperti membuat kelas C++ diwarisi dari sisi C#, dan desainnya pun runtuh
Akhirnya saya beralih ke pendekatan yang lebih langsung, kurang fleksibel tetapi jauh lebih sederhana, dan fleksibilitasnya saya letakkan di sisi C#
Saya penasaran bagaimana Anda menyusun sistem P/Invoke Anda
Berkat itu saya jadi tidak sampai melakukan upaya sia-sia seperti membuat aplikasi untuk GEOS atau bergabung dengan tim Hurd beranggotakan satu orang
Saya sempat memakai Terminal.Gui, tetapi lebih tertarik ke TV sehingga pernah mempertimbangkan membuat wrapper, dan saya benar-benar ingin melihatnya saat sudah dipublikasikan
Karier pemrograman saya secara harfiah dimulai dari tempat sampah pada tahun 90-an
Saya memungut buku Turbo Vision yang dibuang seseorang, lalu langsung jatuh cinta pada TUI kebiruan yang bisa dibuat siapa saja
Versi aslinya ada di Turbo Pascal 6, dan port C++ muncul belakangan
Jadi ini bisa dibilang port modern dari sebuah port
Borland punya pola serupa pada framework lain; OWL juga awalnya lebih dulu ada di Turbo Pascal for Windows 1.5, dan banyak alat C++ Builder sebenarnya ditulis dengan Delphi
Object Pascal di Turbo Pascal 5.5, lalu Turbo Vision di versi 6, adalah pengenalan saya ke OOP, dan saya merasa beruntung menapaki jalur itu
Bahkan di lingkungan seperti MS-DOS pun saya bisa benar-benar belajar keunggulan framework yang dibawa OOP dan Turbo Vision
Saat Borland merilis Turbo Pascal, Turbo C++, dan TurboVision, rasanya seperti seluruh semesta kemungkinan terbuka lebar
Performa kompiler juga luar biasa, dan manualnya seperti karya seni; andai saja saya masih menyimpan buku-buku itu
Ini benar-benar harta budaya
Pada awal 90-an saya belajar C/C++ hampir sepenuhnya secara otodidak hanya dengan membaca tumpukan buku Borland yang datang bersama Turbo C++, dan sekarang rasanya bahkan sulit membayangkan orang belajar seperti itu hanya dari buku referensi
Framework TUI baru selalu terasa seperti ada yang kurang, dan sekarang saya ingin memakainya lagi untuk melihat apakah itu cuma nostalgia atau bukan
Saya berencana memakainya pada alat berikutnya, dan ingin memberi tepuk tangan besar kepada para pembuatnya
Selain GW-BASIC dan MS-DOS, semuanya Borland: Turbo BASIC, Turbo Pascal, Turbo C++ for MS-DOS and Windows 3.x, Turbo Vision, sampai OWL
Saya mulai memakai VC++ sekitar versi 5, tetapi MFC selalu terasa terlalu hambar dibandingkan produk-produk Borland
Bahkan sekarang pun masih jarang ada yang benar-benar menandingi kemampuan RAD C++ Builder, dan .NET juga butuh waktu cukup lama untuk merapikan cerita low-level coding dan AOT ala Delphi
Menurut saya para pengembang Go, C++, dan Rust seharusnya diberi beberapa salinan Turbo Pascal 7 untuk MS-DOS dan Delphi modern
Turbo Vision 2.0 masih cukup praktis sampai sekarang, dan saya benar-benar memakainya untuk pekerjaan prototipe sekitar setahun lalu
Saya mencoba membuat frontend Turbo Vision untuk debugger LLDB agar berfungsi seperti Turbo Debugger milik Borland, dan sebagian besar berhasil sesuai harapan
Mengejutkan karena rasanya seperti langsung melanjutkan dari titik saat semuanya berhenti pada 199x, dan saya juga bisa mengompilasi serta menjalankan kode dari 1993 tanpa masalah besar
Editor internalnya juga punya versi berbasis Scintilla yang lebih baik, jadi ada fitur seperti syntax highlighting, tetapi modifikasi yang ingin saya lakukan tidak berjalan mulus, jadi mungkin saya harus meminta bantuan penulisnya
Namun, dalam arti dokumentasi sebagai pengetahuan bersama ala masa kini, memang masih kurang, sehingga sulit bertanya ke Stack Overflow atau AI; saya akhirnya harus belajar dari kode contoh dan membaca berulang beberapa buku Turbo Vision seperti cara lama
Layout manual cukup merepotkan, jadi saya berharap ada auto layout seperti Qt, dan saya juga agak merindukan splitter, meski implementasinya sepertinya tidak sulit
Hal lain yang mengejutkan adalah TV ternyata cukup kecil dan ringkas. Pada tahun 90-an dulu rasanya sangat besar
Secara keseluruhan, modernisasinya dilakukan dengan sangat baik, dan saya sangat menyukainya
Turbo Vision dulu justru menyediakan sangat banyak dokumentasi berkualitas tinggi
Menurut saya, yang justru kekurangan dokumentasi seperti itu adalah dunia modern
https://archive.org/details/bitsavers_borlandTurrogrammingGuide1992_25707423
Melihat banyak sekali direktif cmake membuat saya ingin kembali ke masa lalu tanpa alasan yang jelas
Dulu di Turbo C atau Pascal tinggal tekan F9 lalu langsung jalan
Di sisi lain, ini juga terasa menunjukkan ketidakmampuan toolchain kita
Di zaman sekarang seharusnya cukup dengan menunjuk satu kompiler online untuk langsung menjalankannya, atau mengunduh lalu membuka satu folder dan menjalankannya; bukannya berubah jadi semacam ritual
./configure && make && make install seharusnya tetap menjadi gold standard
Ini hanya salah satu dari sekian port/klon Turbo Vision
Di dunia C++ juga ada ini: https://github.com/kloczek/tvision
Versi yang masuk ke FreePascal/Lazarus ditulis dalam Pascal, dan ada juga versi Rust yang agak terasa seperti vibe-coded: https://github.com/aovestdipaperino/turbo-vision-4-rust
Menjalankannya di terminal memang sedikit menghilangkan sensasi inti dari mouse di layar mode teks aslinya
Di layar mode teks sungguhan, mouse itu bukan terlihat seperti pointer, melainkan seperti blok kuning yang digerakkan dengan mouse
Saya penasaran apakah ada yang pernah menjalankannya di mode teks Linux beresolusi tinggi dengan GPM
Caranya adalah dengan membalik warna sel yang ditimpa, dan karena jendela utama yang memenuhi sebagian besar layar biasanya berwarna biru tua, hasilnya sering tampak seperti blok kuning terang
Saya merekomendasikan episode Wookash podcast terbaru tentang Chuck Jazdzewski
Ia adalah salah satu anggota tim yang membuat Turbo Vision asli, dan banyak cerita tentang ekosistemnya secara keseluruhan juga muncul di sana
Saya masih lebih menginginkan Turbo Vision yang asli, yaitu versi Pascal, daripada versi C++
Versi C++ pada akhirnya terasa lebih seperti hasil pemindahan dari versi Pascal
Misalnya, di Pascal
usesadalah keyword, sedangkan cara meng-include modul dengan#defineterasa seperti semacam hackYa, mungkin sekarang itu bukan perbedaan besar
IDE mode teksnya juga memakai Free Vision
https://wiki.lazarus.freepascal.org/images/1/19/Userscreen.png
Hanya saja perbedaan intinya adalah Free Vision dan Turbo Vision memakai tipe
objectdari era Turbo Pascal 5.5, bukanclassseperti di Delphiclassmemudahkan implementasi hal-hal seperti serialisasi otomatis berkat RTTI, sedangkanobjecttidak punya itu, jadi untuk membedakan tipe yang berbeda saat runtime perlu melakukan serialisasi manual, misalnya dengan mendaftarkan pointer VMT yang berada pada offset tetap di pointer objekFree Pascal memang menambahkan beberapa kenyamanan ke
objectseperti private/protected/public dan property, tetapi Free Vision tidak memakai ekstensi-ekstensi itu karena harus mengimplementasikan API Turbo Vision asli