• Linux के लिए एक CLI प्रोग्राम, जो GUI एप्लिकेशन को सीधे टर्मिनल में चलाने देता है
  • यह अपने खुद के Wayland compositor का उपयोग करता है, जो मॉनिटर की जगह GUI आउटपुट को टर्मिनल तक पहुंचाता है
  • ssh वातावरण में भी चल सकता है, और वेब ब्राउज़र, फ़ाइल मैनेजर, यहाँ तक कि Doom गेम भी टर्मिनल के भीतर चला सकता है
  • आउटपुट क्वालिटी टर्मिनल resolution (rows·columns की संख्या) पर निर्भर करती है, और iTerm2·kitty जैसे image-supporting terminals में full-resolution rendering भी सपोर्ट करता है
  • इसे Typescript और bun के आधार पर बनाया गया है, इसमें कुछ C++ कोड भी शामिल है, और फिलहाल यह कुछ ऐप्स तक सीमित है, लेकिन “Term everything❗” के लक्ष्य के साथ लगातार विस्तार हो रहा है

प्रोजेक्ट का महत्व और तुलनात्मक बढ़त

  • Term.everything पारंपरिक terminal file viewer या साधारण image output tools से अलग है, क्योंकि यह “सभी” GUI एप्लिकेशन को टर्मिनल के अंदर चला सकता है
  • SSH सहित नेटवर्क वातावरण में भी GUI इंटरफ़ेस इस्तेमाल किया जा सकता है, इसलिए server management, remote development में इसकी खास उपयोगिता है
  • यह kitty, iterm2 जैसे आधुनिक terminals की image capabilities का पूरा उपयोग करता है, और resolution·framerate बढ़ाने के विकल्प भी देता है

अवलोकन

  • Term.everything एक Linux CLI प्रोग्राम है, जिसकी खासियत यह है कि यह टर्मिनल में GUI विंडो को सीधे चलाने देता है
  • इसका मुख्य हिस्सा एक स्वयं विकसित Wayland-आधारित compositor है, जो सामान्य मॉनिटर की जगह टर्मिनल में GUI को render करता है
  • यह x11 और Wayland दोनों आधारित ऐप्स को सपोर्ट करता है, और ssh के माध्यम से remote उपयोग भी संभव है
  • टर्मिनल की सीमित rows/columns विंडो क्वालिटी को प्रभावित करती हैं, और टर्मिनल resolution बढ़ाने पर क्वालिटी बेहतर हो सकती है (हालांकि performance कम हो सकती है)

प्रमुख उपयोग उदाहरण

  • गेम चलाना: टर्मिनल के अंदर Fontemon जैसे गेम या Doom (shareware episode) चलाया जा सकता है
  • वीडियो चलाना: Wing It! फ़िल्म चलाई जा सकती है, और resolution समायोजित करके framerate तथा image quality के बीच संतुलन बनाया जा सकता है
  • ब्राउज़र चलाना: iTerm2 + ssh वातावरण में Ubuntu से कनेक्ट होकर Firefox चलाया जा सकता है
  • फ़ाइल व्यूअर का विकल्प: अलग से terminal-only file viewer बनाने की ज़रूरत नहीं, मौजूदा GUI file manager को सीधे टर्मिनल में इस्तेमाल किया जा सकता है
  • रिकर्सिव रनिंग: टर्मिनल के अंदर एक और टर्मिनल चलाना, यानी "terminal in a terminal"

कार्यविधि और विकास संबंधी जानकारी

  • बुनियादी अवधारणा

    • पहले के समय में, अगर किसी प्रोग्राम को स्क्रीन पर कुछ बनाना होता था, तो वह RAM के एक विशेष हिस्से में सीधे लिख सकता था
    • आधुनिक सिस्टम में Display Server इनपुट और आउटपुट को संभालता है, और माउस/कीबोर्ड जैसे इनपुट तथा graphics/image output का समन्वय करता है
    • Linux वातावरण में आम तौर पर Wayland protocol या X11 का उपयोग होता है, और Term.everything Wayland पर आधारित है
  • Wayland protocol

    • Wayland स्वयं display server नहीं है, बल्कि सर्वर और प्रोग्राम के बीच संचार को परिभाषित करने वाला एक protocol है
    • प्रोग्राम अपने द्वारा render किया गया परिणाम display server को देता है, और सर्वर उसे स्क्रीन पर दिखाता है
    • महत्वपूर्ण बात यह है कि यह कोई निश्चित rendering model थोपता नहीं है → प्रोग्राम अपनी इच्छानुसार चित्र बना सकता है
    • इसी वजह से आउटपुट को स्क्रीन की बजाय किसी और जगह (जैसे टर्मिनल) भेजना संभव है
  • Term.everything में आउटपुट प्रोसेसिंग

    • Wayland client (चल रहा GUI ऐप) द्वारा बनाई गई image को लेकर उसे टर्मिनल character output में बदला जाता है
    • रूपांतरण प्रक्रिया:
      • 1. client द्वारा भेजा गया image data प्राप्त करना
      • 2. उसे UTF-8 characters + ANSI escape codes में बदलना
      • 3. इस रूपांतरण में chafa library का उपयोग करके pixels को terminal characters से मैप करना
    • इनपुट के लिए stdin से आने वाले keyboard और mouse events को Wayland client तक पहुंचाया जाता है
  • वास्तविक इम्प्लीमेंटेशन

    • मूल विचार सरल है, लेकिन वास्तविक इम्प्लीमेंटेशन में लगभग दस हज़ार लाइनों के कोड की ज़रूरत पड़ी
    • यह Typescript (bun आधारित) और कुछ C++ में लिखा गया है, और custom Wayland display server की भूमिका निभाता है
    • source code को src/ directory में देखा जा सकता है
  • विस्तार की संभावना

    • Term.everything का लक्ष्य सिर्फ टर्मिनल में GUI चलाना भर नहीं है
    • Wayland-आधारित custom display server का उपयोग करके अन्य प्रयोगात्मक विचारों को भी लागू किया जा सकता है
    • उदाहरण: आउटपुट डिवाइस को टर्मिनल की बजाय किसी बिल्कुल अलग माध्यम (जैसे printer, physical artwork आदि) से जोड़ना

अभी कोई टिप्पणी नहीं है.

अभी कोई टिप्पणी नहीं है.