9 puan yazan GN⁺ 3 일 전 | 1 yorum | WhatsApp'ta paylaş
  • 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 char tabanlı API korunurken CJK tam genişlikli karakterler, birleştirme karakterleri ve emojiler de işlenebilir; ayrıca moveStr() ile tek satırda çok baytlı kaydırma ve kırpma işlemleri otomatik yapılır
  • Microsoft RTL'nin UTF-8 setlocale desteğinden yararlanarak std::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 tvision tek satırda kurulum tamamlanır, CMake submodule olarak add_subdirectory eklendiğinde bağımlılıklar otomatik bağlanır
  • C++14 ve üzeri, libncursesw gerekir / MIT lisansı

1 yorum

 
GN⁺ 3 일 전
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

    • Oxygene, RemObjects’un Elements ürün ailesinin bir parçası; yani Pascal tabanlı Oxygene dışında da birkaç popüler dili karıştırarak Windows, macOS, Linux, Android gibi platformlara taşıyabiliyorsunuz
      https://www.remobjects.com/elements/oxygene/
      https://www.remobjects.com/elements/
    • Ben de bu tvision portu ile çalıştım; ne zaman yeni bir TUI çatısını denesem sonunda Turbo Vision tarafının daha iyi olduğunu hissediyorum
      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
    • Bu TV kütüphanesiyle uğraşmak nostalji duygusunu tam yerinden kaşıdığı için keyifli
      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
    • Ben de aynısını yapmak istemiştim
      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

    • İlginç olan şu ki Free Vision, bir dönem public domain olarak yayımlanmış C++ sürümünün birileri tarafından elle çevrilip yeniden Object/Free Pascal’a aktarılmasıyla ortaya çıkmış bir şey
    • OWL gerçekten zamanının ötesindeydi
  • 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

    • O kılavuzlar gerçekten olağanüstüydü
      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
    • Turbo Vision uzun süre benim için altın standart gibiydi
      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
    • Bir dönem tam anlamıyla Borland fanatiğiydim
      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

  • 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ü

    • Modern Unix’te yazılım derlemek bir zamanlar zaten çözülmüş bir problemdi
      ./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

    • Özünde sarı değildi
      Ü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 uses bir anahtar sözcük; ama #define ile modül include etmek ister istemez biraz hack gibi hissettiriyor
    Gerçi bugün bunun çok büyük bir fark yaratmıyor olması da mümkün

    • Free Pascal ile gelen Free Vision aslında fiilen o rolü görüyor
      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 class yapısı yerine Turbo Pascal 5.5 döneminin object türünü kullanıyor
      class, RTTI sayesinde otomatik serileştirme gibi şeyleri uygulamayı kolaylaştırıyor; object tarafı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 gerekiyor
      Free Pascal object yapı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