10 पॉइंट द्वारा GN⁺ 2026-04-27 | 1 टिप्पणियां | WhatsApp पर शेयर करें
  • 90 के दशक के Borland टेक्स्ट UI framework का cross-platform + Unicode के साथ modernize किया गया open source port
  • टर्मिनल ऐप बनाते समय terminal compatibility को अलग से संभालने की जरूरत नहीं - Linux, Windows, DOS पर एक ही code से चलता है
  • resize किए जा सकने वाले overlapping windows, pull-down menus, dialogs, buttons, scrollbars, input boxes, checkboxes, radio buttons जैसे TUI widgets पहले से built-in हैं, इसलिए इन्हें खुद implement करने की जरूरत नहीं, सीधे इस्तेमाल किया जा सकता है
  • UTF-8 Unicode का पूर्ण समर्थन — मौजूदा char-आधारित API को बनाए रखते हुए भी CJK full-width characters, combining characters, और emoji तक संभाले जा सकते हैं, और moveStr() की एक ही लाइन से multibyte scrolling और clipping अपने आप हो जाती है
  • Microsoft RTL के UTF-8 setlocale समर्थन का उपयोग करके std::ifstream f("コンピュータ.txt") जैसा code Windows पर भी वैसे ही चलता है
  • 24-bit true color support — पहले के 16 colors से बढ़ाकर RGB, xterm-256, और terminal default colors तक विस्तार किया गया है, और अगर terminal support न करे तो अपने आप सबसे नज़दीकी रंग में quantize कर देता है
  • mouse wheel, middle button, triple click, 32767 rows/columns तक की screen size, window resize events आदि सहित आधुनिक input/output का पूरा समर्थन
  • system clipboard integration built-in: Windows/macOS पर तुरंत काम करता है, और SSH remote environment में भी X11 forwarding या OSC 52 escape code के जरिए copy/paste संभव है
  • पुराने Borland C++ दौर के Turbo Vision source code को बहुत कम बदलाव के साथ वैसे का वैसा build किया जा सकता है
  • CMake build system का समर्थन, vcpkg से ./vcpkg install tvision की एक लाइन में installation पूरा, और CMake submodule के रूप में add_subdirectory जोड़ने पर dependency अपने आप link हो जाती है
  • C++14 या उससे ऊपर, libncursesw आवश्यक / MIT license

1 टिप्पणियां

 
GN⁺ 2026-04-27
Hacker News टिप्पणियाँ
  • इस repository को front page पर देखना सच में बहुत अच्छा लगा, और मैं अभी इसी repository के लिए अपना wrapper खुद बना रहा हूँ
    .Net के ऊपर macOS पर Turbo Vision चला रहा हूँ, और यह काफ़ी जादुई लगता है
    मैं एक higher-level API दे रहा हूँ, काफ़ी पुरानी palette API को wrap या बेहतर कर रहा हूँ, और layout भी जोड़ रहा हूँ
    अभी यह सब private repository में ज़ोरों से चल रहा काम है, और आज surface के हिसाब से palette सेट कर रहा हूँ जहाँ controls रखे गए हैं, कल किसी और हिस्से को polish करूँगा—ऐसे ही लगातार सुधार रहा हूँ
    layout को साफ़-सुथरा करना, और आज के हिसाब से missing basic controls जोड़ना जैसे काम अभी बाकी हैं
    पहले Terminal.Gui भी इस्तेमाल किया था, लेकिन शायद v2 transition की वजह से उसे bugs के बिना संभालना काफ़ी मुश्किल था, और Claude ने भी यह अच्छी तरह दिखा दिया कि अगर असली terminal को ध्यान में रखे बिना TUI library बनाई जाए तो क्या नहीं करना चाहिए
    इसलिए मैं सोच ही रहा था कि Turbo Vision का कोई आधुनिक रूप होना चाहिए, तभी यह repository मिली, और इसमें Unicode support देखकर सच में बहुत आभार महसूस हुआ

    • Oxygene RemObjects के Elements product family का हिस्सा है, इसलिए Pascal-आधारित Oxygene के अलावा भी आप कई लोकप्रिय languages को मिलाकर Windows, macOS, Linux, Android वगैरह पर ले जा सकते हैं
      https://www.remobjects.com/elements/oxygene/
      https://www.remobjects.com/elements/
    • मैंने भी इस tvision port के साथ काम किया है, और जब भी कोई नया TUI framework छूता हूँ तो आख़िर में यही लगता है कि Turbo Vision ज़्यादा बेहतर है
      मैं भी एक .NET wrapper बना रहा हूँ, और शायद मेरी प्रगति कम हुई है, लेकिन मैं Windows Forms API को जितना हो सके उतना नज़दीक से mimic करना चाहता हूँ, यहाँ तक कि drag-and-drop TUI designer भी जोड़ना चाहता हूँ
      उदाहरण यहाँ है: https://github.com/brianluft/terminalforms/tree/main/src/TerminalFormsDemo
      C++ वाली मुश्किल integration का ज़्यादातर हिस्सा मैंने यहाँ संभाला है: https://github.com/brianluft/terminalforms/tree/main/src/tfcore
      मैंने simple C functions export किए हैं ताकि उन्हें P/Invoke से बुलाया जा सके, और C# side को मुख्यतः class structure पर फ़ोकस करने दिया
      शुरुआत में मैंने ज़ोर दिया था कि C++ में जो कुछ संभव है वह सब C# में भी संभव होना चाहिए, लेकिन वह बहुत जटिल हो गया, और placement new से C++ objects को C# buffers के अंदर रखकर लगभग यह स्थिति आ गई कि C# side से C++ classes inherit की जा रही हों—फिर design ही टूट गया
      आख़िर में मैंने एक ज़्यादा सीधा, कम flexible लेकिन बहुत सरल approach अपनाया, और flexibility C# side पर छोड़ दी
      आपका P/Invoke system कैसे बना है, यह जानने की जिज्ञासा है
    • इस TV library के साथ काम करने में nostalgia का मज़ा भरपूर मिलता है
      शायद इसी वजह से GEOS के लिए app बनाने या one-man Hurd team में शामिल होने जैसी बेकार कोशिशों से बच गया हूँ
    • मैं भी यही करना चाहता था
      Terminal.Gui इस्तेमाल किया था, लेकिन TV side ज़्यादा आकर्षक लगी, इसलिए wrapper के बारे में सोच रहा था, और अगर यह public हो तो मैं ज़रूर देखना चाहूँगा
  • मेरा programming career सचमुच 90s में कूड़ेदान से शुरू हुआ था
    किसी के फेंके हुए Turbo Vision book मिली थी, और मैं उन नीले रंग की TUI screens पर तुरंत फ़िदा हो गया जिन्हें कोई भी बना सकता था

  • मूल version Turbo Pascal 6 में था, और C++ port बाद में आया
    इसलिए इसे port का आधुनिक port कहना ठीक होगा
    Borland के दूसरे frameworks में भी यही पैटर्न था; OWL भी मूल रूप से Turbo Pascal for Windows 1.5 side पर पहले था, और C++ Builder के काफ़ी tools असल में Delphi में लिखे गए थे
    Turbo Pascal 5.5 का Object Pascal, और 6 का Turbo Vision—यही मेरे लिए OOP की शुरुआत थे, और मुझे लगता है कि उस रास्ते पर जाना मेरी किस्मत थी
    MS-DOS जैसे environment में भी OOP और Turbo Vision के framework फ़ायदे सचमुच अच्छे से सीखे जा सकते थे

    • मज़ेदार बात यह है कि Free Vision कभी public domain में छोड़े गए C++ version का किसी ने हाथ से अनुवाद करके उसे फिर Object/Free Pascal में वापस ले जाने का नतीजा है
    • OWL सच में अपने समय से बहुत आगे था
  • जब Borland ने Turbo Pascal, Turbo C++, और TurboVision जारी किए, तो लगा जैसे संभावनाओं का पूरा ब्रह्मांड खुल गया हो
    compiler performance भी शानदार थी और manuals कला-कृतियों जैसे थे; काश वे किताबें अभी भी मेरे पास होतीं
    यह बस एक सांस्कृतिक ख़ज़ाना है

    • वे manuals सच में कमाल के थे
      90s की शुरुआत में मैंने लगभग सिर्फ़ Turbo C++ के साथ आने वाली Borland की किताबों के ढेर को पढ़कर खुद C/C++ सीखा था, और आज यह कल्पना करना भी मुश्किल है कि कोई सिर्फ़ reference books पढ़कर इस तरह सीख सकता है
    • Turbo Vision लंबे समय तक मेरे लिए gold standard जैसा था
      नए TUI frameworks में हमेशा कुछ न कुछ कमी लगती थी, और अब इसे फिर से इस्तेमाल करके देखूँगा कि वह सिर्फ़ nostalgia था या नहीं
      मैं इसे अपने अगले tool में डालने वाला हूँ, और इसे बनाने वालों के लिए ज़ोरदार तालियाँ हैं
    • एक समय था जब मैं पूरी तरह Borland all-in था
      GW-BASIC और MS-DOS को छोड़ दें तो Turbo BASIC, Turbo Pascal, Turbo C++ for MS-DOS and Windows 3.x, Turbo Vision, OWL—सब कुछ Borland ही था
      VC++ मैंने शायद version 5 के आसपास इस्तेमाल किया, लेकिन MFC हमेशा Borland products की तुलना में बहुत फीका लगा
      आज भी C++ Builder की RAD capabilities का सही मुकाबला कम ही चीज़ें कर पाती हैं, और .NET को भी Delphi जैसी low-level coding और AOT story को ठीक करने में काफ़ी समय लगा
      मेरा मानना है कि Go, C++, और Rust developers को MS-DOS के लिए Turbo Pascal 7 और आधुनिक Delphi की कुछ-कुछ copies पकड़ाई जानी चाहिए
  • Turbo Vision 2.0 आज भी काफ़ी practical है, और मैंने एक साल पहले prototyping के काम में इसे सीधे इस्तेमाल किया था
    मैंने LLDB debugger के लिए एक Turbo Vision frontend बनाने की कोशिश की थी ताकि वह Borland के Turbo Debugger जैसा काम करे, और ज़्यादातर चीज़ें मनचाहे तरीके से चलीं
    यह देखकर हैरानी हुई कि यह 199x में जहाँ रुका था वहीं से जैसे आगे बढ़ गया हो, और 1993 का code भी बिना बड़ी समस्या के compile और run हो गया
    एक बेहतर built-in editor का Scintilla-based version भी है, जिसमें syntax highlighting जैसी सुविधाएँ हैं, लेकिन जिस तरह मैं उसे modify करना चाहता था, वह ठीक से नहीं हुआ, इसलिए शायद author से मदद माँगनी पड़ेगी
    हालाँकि आज के साझा ज्ञान वाले अर्थ में documentation की कमी है, इसलिए Stack Overflow या AI से पूछना आसान नहीं था; मुझे example code देखकर सीखना पड़ा और Turbo Vision की कुछ किताबें बार-बार पढ़ने वाली पुरानी शैली अपनानी पड़ी
    manual layout काफ़ी झंझटभरा है, इसलिए Qt जैसी auto layout सुविधा होती तो अच्छा होता, और splitter भी याद आता है, हालाँकि उसे implement करना मुश्किल नहीं लगता
    एक और हैरानी की बात यह थी कि TV असल में काफ़ी छोटा और compact है. 90s में यह बहुत विशाल लगता था
    कुल मिलाकर modernization का काम बहुत अच्छे से हुआ है, और मुझे यह बेहद पसंद है

    • मैं उस हिस्से को थोड़ा अलग तरह से देखता हूँ
      Turbo Vision मूल रूप से बहुत बड़ी मात्रा में high-quality documentation के साथ आता था
      उल्टा मुझे लगता है कि ऐसी documentation की कमी आज की चीज़ों में ज़्यादा है
      https://archive.org/details/bitsavers_borlandTurrogrammingGuide1992_25707423
  • इतनी सारी cmake directives देखकर बेवजह अतीत में लौटने का मन करता है
    Turbo C या Pascal में तो बस F9 दबाते ही सब चल पड़ता था
    दूसरी तरफ़, यह हमारी toolchain की अक्षम्यता भी दिखाता है
    आज के ज़माने में तो बस किसी online compiler की ओर इशारा करो और तुरंत चला दो, या download करके एक folder खोलो और run कर दो—इतना काफ़ी होना चाहिए; यह tools नहीं, किसी ritual जैसी प्रक्रिया बन गई है

    • आधुनिक Unix में software compile करना एक समय पहले से हल की गई समस्या था
      ./configure && make && make install अब भी gold standard होना चाहिए
  • यह बस Turbo Vision ports/clones में से एक है
    C++ side पर यह भी है: https://github.com/kloczek/tvision
    FreePascal/Lazarus में शामिल version Pascal में लिखा गया है, और एक Rust version भी है, हालाँकि वह थोड़ा vibe-coded जैसा लगता है: https://github.com/aovestdipaperino/turbo-vision-4-rust

  • terminal में इसे चलाने पर वह मूल text-mode screen mouse वाली अहम अनुभूति थोड़ी खो जाती है
    असली text-mode screen पर यह mouse pointer जैसा नहीं दिखता था, बल्कि mouse से हिलने वाला एक पीला block जैसा लगता था
    जानना चाहूँगा कि किसी ने इसे high-resolution Linux text mode में GPM के साथ चलाया है या नहीं

    • मूल रूप से यह पीला नहीं था
      यह ऊपर ढके हुए cell के रंगों को invert करके दिखाता था, और क्योंकि स्क्रीन का ज़्यादातर हिस्सा भरने वाली main window गहरे नीले रंग की होती थी, इसलिए नतीजा अक्सर चमकीले पीले block जैसा दिखता था
  • हाल की Wookash podcast में Chuck Jazdzewski वाला episode recommend करता हूँ
    वह मूल Turbo Vision बनाने वाली team का हिस्सा था, और पूरे ecosystem के बारे में भी काफ़ी बातें करता है

  • मैं आज भी C++ version से ज़्यादा असल Turbo Vision, यानी Pascal version, चाहता हूँ
    C++ version आख़िरकार Pascal version का एक अनुवाद ही ज़्यादा लगता है
    उदाहरण के लिए Pascal में uses एक keyword है, जबकि #define से modules include करने का तरीका थोड़ा hack जैसा लगता है
    हालाँकि अब शायद यह कोई बहुत बड़ा फ़र्क न हो

    • Free Pascal के साथ शामिल Free Vision लगभग वही भूमिका निभाता है
      text-mode IDE भी Free Vision का इस्तेमाल करता है
      https://wiki.lazarus.freepascal.org/images/1/19/Userscreen.png
      लेकिन मुख्य फ़र्क यह है कि Free Vision और Turbo Vision, Delphi के class की जगह Turbo Pascal 5.5 के दौर वाले object type का इस्तेमाल करते हैं
      class में RTTI की वजह से automatic serialization जैसी चीज़ें implement करना आसान होता है, लेकिन object में वह नहीं होता, इसलिए runtime पर अलग-अलग types पहचानने के लिए object pointer के एक fixed offset पर मौजूद VMT pointer को register करके manual serialization करनी पड़ती है
      Free Pascal ने object में private/protected/public, property जैसी कुछ सुविधाजनक extensions जोड़ी हैं, लेकिन Free Vision मूल Turbo Vision API को implement करने के लिए उन extensions का इस्तेमाल नहीं करता