Turbo Vision 2.0 - 90'ların metin tabanlı UI'sinin yeniden canlandırılması
(github.com/magiblot)- 90'larda Borland'ın metin tabanlı UI framework'ünün çapraz platform + Unicode ile modernleştirilmiş açık kaynak portu
- Terminal uygulaması geliştirirken terminal uyumluluğunu ayrıca ele almaya gerek yok - Linux, Windows, DOS'ta aynı kodla çalışır
- Yeniden boyutlandırılabilir üst üste binen pencereler, açılır menüler, diyaloglar, butonlar, kaydırma çubukları, giriş kutuları, onay kutuları, radyo düğmeleri gibi TUI widget'ları zaten yerleşik olduğundan bunları sıfırdan yazmadan doğrudan kullanabilirsiniz
- UTF-8 Unicode için tam destek — mevcut
chartabanlı API korunurken CJK tam genişlikli karakterler, birleştirme karakterleri ve emojiler de işlenebilir; ayrıcamoveStr()ile tek satırda çok baytlı kaydırma ve kırpma işlemleri otomatik yapılır - Microsoft RTL'nin UTF-8
setlocaledesteğinden yararlanarakstd::ifstream f("コンピュータ.txt")gibi kodlar Windows'ta da olduğu gibi çalışır - 24 bit true color desteği — önceki 16 renkten RGB, xterm-256 ve terminalin varsayılan renklerine kadar genişletildi; terminal desteklemiyorsa en yakın renge otomatik olarak kuantize edilir
- Fare tekerleği, orta tuş, üçlü tıklama, 32767 satır/sütuna kadar ekran boyutu, pencere yeniden boyutlandırma olayları gibi modern giriş/çıkış özelliklerinin tamamını destekler
- Sistem panosuyla entegrasyon yerleşik olarak gelir: Windows/macOS'ta doğrudan çalışır; SSH uzak ortamlarında da X11 forwarding veya OSC 52 escape kodlarıyla kopyala/yapıştır mümkündür
- Eski Borland C++ dönemindeki Turbo Vision kaynak kodu minimum değişiklikle olduğu gibi derlenebilir
- CMake build sistemi desteklenir; vcpkg ile
./vcpkg install tvisiontek satırda kurulum tamamlanır, CMake submodule olarakadd_subdirectoryeklendiğinde bağımlılıklar otomatik bağlanır - C++14 ve üzeri,
libncurseswgerekir / MIT lisansı
1 yorum
Hacker News yorumları
Bu deponun ön sayfaya çıktığını görmek gerçekten sevindirici; ben de şu anda bu depo için kendi wrapper’ımı yapıyorum
.NET üzerinde macOS’ta Turbo Vision çalıştırıyorum ve oldukça büyülü hissettiriyor
Daha yüksek seviyeli bir API sunuyor, epey eski kalan palette API’sini de sarmalıyor ya da iyileştiriyor, ayrıca layout da ekliyorum
Şimdilik hâlâ özel bir depoda yoğun şekilde çalışıyorum; bugün denetimlerin yerleştirildiği surface’e göre palette’i ayarlayıp yarın başka bir kısmı düzeltmek gibi sürekli elden geçiriyorum
Layout’ı toparlama, günümüz standartlarına göre eksik kalan temel denetimleri ekleme gibi yapılacaklar da var
Daha önce Terminal.Gui’yi de kullandım ama v2 geçiş sürecinde olduğundan sanırım, hatasız biçimde kullanmak oldukça zordu; ayrıca Claude da gerçek bir terminali hesaba katmadan TUI kütüphanesi yaparken nelerin yapılmaması gerektiğini iyi gösterdi
Bu yüzden modern bir Turbo Vision olsa iyi olur diye düşünürken bu depoyu buldum; Unicode desteğinin de eklenmiş olduğunu görünce gerçekten minnettar oldum
https://www.remobjects.com/elements/oxygene/
https://www.remobjects.com/elements/
Ben de bir .NET wrapper yapıyorum; muhtemelen daha az ilerledim ama Windows Forms API’sini olabildiğince benzeterek, hatta sürükle-bırak TUI tasarımcısı da eklemek istiyorum
Örnek burada: https://github.com/brianluft/terminalforms/tree/main/src/TerminalFormsDemo
C++ tarafındaki zor entegrasyon işlerinin çoğunu burada çözdüm: https://github.com/brianluft/terminalforms/tree/main/src/tfcore
P/Invoke ile çağrılabilsin diye basit C fonksiyonları export ettim; böylece C# tarafı daha çok sınıf yapısını düzenlemeye odaklanabildi
Başta C++’ta yapılabilen her şeyin C#’ta da yapılabilmesi gerektiğini zorladım ama iş fazla karmaşıklaştı; placement new ile C++ nesnelerini C# buffer’ının içine koyup pratikte C# tarafından C++ sınıflarını miras alacak seviyeye kadar gittim, sonra tasarım dağıldı
Sonunda daha doğrudan, daha az esnek ama çok daha basit bir yaklaşıma geçtim; esnekliği de C# tarafında bıraktım
Sizin P/Invoke sisteminizin nasıl kurulduğunu merak ediyorum
Sayesinde GEOS için uygulama yazmak ya da tek kişilik bir Hurd ekibine katılmak gibi beyhude girişimlere kalkışmıyorum sanırım
Terminal.Gui’yi denedim ama TV tarafı daha çekici geldiği için wrapper yapmayı düşünmüştüm; yayımlanırsa gerçekten görmek isterim
Benim programlama kariyerim kelimenin tam anlamıyla 90’larda çöpten başladı
Birinin attığı bir Turbo Vision kitabını buldum ve herkesin yapabildiği o mavi tonlu TUI’ye anında vuruldum
Asıl sürüm Turbo Pascal 6 ile geliyordu, C++ portu ise daha sonra çıktı
Yani buna portun modern bir portu denebilir
Borland’da başka çatılarda da benzer bir durum vardı; örneğin OWL de aslında önce Turbo Pascal for Windows 1.5 tarafında vardı ve C++ Builder araçlarının önemli bir kısmı da gerçekte Delphi ile yazılmıştı
Turbo Pascal 5.5’teki Object Pascal ve 6’daki Turbo Vision benim OOP’ye girişimdi; o yoldan başlamış olmamın şanslı bir şey olduğunu düşünüyorum
MS-DOS gibi ortamlarda bile OOP’nin ve Turbo Vision’ın sunduğu çatı yaklaşımının avantajlarını gerçekten öğrenebiliyordunuz
Borland Turbo Pascal, Turbo C++ ve TurboVision’ı çıkardığında, sanki olasılıkların evreni bir anda açılmış gibi hissettirmişti
Derleyici performansı müthişti, kılavuzlar ise adeta birer sanat eseriydi; keşke o kitaplarım hâlâ dursaydı
Bu düpedüz kültürel bir hazine
90’ların başında C/C++’ı neredeyse sadece Turbo C++ ile gelen yığınla Borland kitabını okuyarak kendi kendime öğrendim; bugün sadece referans kitapları okuyarak böyle öğrenmeyi hayal etmek bile zor
Yeni TUI çatıları hep bir şeyler eksikmiş gibi gelirdi; şimdi bunu yeniden kullanıp bunun sadece nostalji olup olmadığını görmeyi düşünüyorum
Bir sonraki aracıma eklemeyi planlıyorum ve yapanları kuvvetle alkışlamak istiyorum
GW-BASIC ve MS-DOS dışında Turbo BASIC, Turbo Pascal, MS-DOS ve Windows 3.x için Turbo C++, Turbo Vision, OWL; her şey Borland’dı
VC++’ı sanırım 5. sürüm civarında kullanmaya başladım ama MFC, Borland ürünlerinin yanında hep fazla sönük gelirdi
Bugün bile C++ Builder’ın RAD yeteneklerini gerçekten yakalayabilen çok az şey var; .NET’in de Delphi benzeri düşük seviyeli kodlama ile AOT tarafını toparlaması epey zaman aldı
Bence Go, C++ ve Rust geliştiricilerinin eline birkaç nüsha MS-DOS için Turbo Pascal 7 ve modern Delphi verilmesi lazım
Turbo Vision 2.0 bugün bile oldukça kullanışlı; bir yıl kadar önce prototip çalışmasında bizzat kullandım
LLDB hata ayıklayıcısı için, Borland’ın Turbo Debugger’ı gibi davranan bir Turbo Vision frontend’i yapmaya çalıştım ve büyük kısmı da istediğim gibi oldu
Sanki 199x’te kaldığı yerden doğrudan devam ediyormuş gibi hissettirmesi şaşırtıcıydı; hatta 1993 kodunu büyük sorun yaşamadan derleyip çalıştırabildim
Dahili editörün Scintilla tabanlı daha iyi bir sürümü de var; syntax highlighting gibi özellikler içeriyor, ama benim değiştirmeye çalıştığım kısımlar pek iyi gitmediği için muhtemelen yazardan yardım istemem gerekecek
Yalnız, bugünkü anlamda ortak bilgiye dönüşmüş dokümantasyon eksikliği var; yani Stack Overflow’a ya da yapay zekaya sormak zor, bu yüzden örnek kodlara bakarak öğrenmek ve Turbo Vision kitaplarını tekrar tekrar okumak gibi eski usul yöntemlere dönmek gerekti
Elle yapılan layout işleri oldukça zahmetli, bu yüzden Qt benzeri otomatik layout olsa güzel olurdu; splitter da biraz özleniyor ama uygulanması zor görünmüyor
Bir başka şaşırtıcı nokta da TV’nin aslında oldukça küçük ve kompakt olmasıydı. 90’larda çok devasa hissettirirdi
Genel olarak modernleştirme çalışması gerçekten çok iyi yapılmış; ben bunu çok beğeniyorum
Turbo Vision aslında başlangıçta çok miktarda yüksek kaliteli belge sunuyordu
Asıl eksik olanın bu tür dokümanlar değil, daha çok bugünün tarafı olduğunu düşünüyorum
https://archive.org/details/bitsavers_borlandTurrogrammingGuide1992_25707423
Ortalıkta bir sürü cmake yönergesi görmek insanı sebepsiz yere geçmişe döndürüyor
Turbo C ya da Pascal’da sadece F9’a basıp hemen çalıştırırdınız
Bir yandan da bunun araç zincirlerimizin ne kadar beceriksiz olduğunu gösterdiğini düşünüyorum
Bugün gelinen noktada, tek yapmanız gereken bir çevrimiçi derleyiciyi açmak ya da bir klasörü indirip açtıktan sonra çalıştırmak olmalı; ama bu artık araçtan çok bir ritüele dönüştü
./configure && make && make install hâlâ altın standart olmalı
Bu sadece Turbo Vision portu/klonlarından biri
C++ tarafında şurası da var: https://github.com/kloczek/tvision
FreePascal/Lazarus ile gelen sürüm Pascal ile yazılmış; bir de Rust sürümü var, biraz vibe-coded gibi görünüyor: https://github.com/aovestdipaperino/turbo-vision-4-rust
Bunu terminalde çalıştırınca, asıl metin modu ekran faresinin verdiği temel hissin bir kısmı kayboluyor
Gerçek metin modu ekranda bu, fare imlecinden çok fareyle hareket ettirilen sarı bir blok gibi görünürdü
Bunu yüksek çözünürlüklü Linux metin modunda GPM ile çalıştıran olmuş mu merak ediyorum
Üstüne geldiği hücrenin rengini tersine çevirerek gösteriliyordu ve ekranın çoğunu koyu mavi ana pencere kapladığından, sonuç çoğu zaman parlak sarı bir blok gibi görünüyordu
Yakın zamanda Wookash podcast’te Chuck Jazdzewski üzerine olan bölümü tavsiye ederim
Kendisi Turbo Vision’ı ilk yapan ekibin bir parçasıydı ve genel ekosistem hakkında da çok şey anlatılıyor
Ben hâlâ C++ sürümünden ziyade gerçek Turbo Vision’ı, yani Pascal sürümünü istiyorum
C++ sürümü nihayetinde Pascal sürümünün taşınmış hali gibi geliyor
Mesela Pascal’da
usesbir anahtar sözcük; ama#defineile modül include etmek ister istemez biraz hack gibi hissettiriyorGerçi bugün bunun çok büyük bir fark yaratmıyor olması da mümkün
Metin modu IDE de Free Vision kullanıyor
https://wiki.lazarus.freepascal.org/images/1/19/Userscreen.png
Ama temel fark şu: Free Vision ve Turbo Vision, Delphi’nin
classyapısı yerine Turbo Pascal 5.5 dönemininobjecttürünü kullanıyorclass, RTTI sayesinde otomatik serileştirme gibi şeyleri uygulamayı kolaylaştırıyor;objecttarafında ise bu yok, dolayısıyla farklı türleri çalışma anında ayırt etmek için nesne işaretçisinin sabit bir ofsetindeki VMT işaretçisini kaydederek elle serileştirme yapmak gerekiyorFree Pascal
objectyapısına private/protected/public, property gibi bazı kolaylıklar eklemiş olsa da Free Vision, özgün Turbo Vision API’sini uygulamak için bu genişletmeleri kullanmıyor