1 पॉइंट द्वारा GN⁺ 4 시간 전 | 3 टिप्पणियां | WhatsApp पर शेयर करें
  • Ghostel एक Emacs terminal emulator है जो Ghostty जैसा libghostty-vt engine इस्तेमाल करता है; इसमें Zig native module terminal state, rendering और local PTY I/O संभालता है, जबकि Elisp keymap, buffer, command और remote process manage करता है
  • यह Kitty keyboard और graphics protocol, OSC 8 hyperlink, OSC 4/10/11 color query, DEC 2026 synchronized output और 5 input modes सपोर्ट करता है, और local bash·zsh·fish·nushell पर shell integration अपने-आप लागू करता है
  • Emacs 28.1 या उससे ऊपर और macOS·Linux·FreeBSD·native Windows सपोर्ट करता है; पहली बार इस्तेमाल करते समय platform-specific prebuilt module अपने-आप download किया जा सकता है, इसलिए सामान्य installation के लिए Zig toolchain की जरूरत नहीं होती
  • Apple M4 Max और Emacs 32.0.50 पर 1MB output process करने वाले benchmark में plain ASCII के लिए Ghostel 75MB/s, vterm 18MB/s, eat 6.2MB/s दर्ज हुआ, और native PTY ने 10MB cat task को लगभग 110ms में absorb किया
  • TRAMP remote terminal, password input protection, Kitty inline image, compilation·Eshell·Comint·Evil·input method integration तक देता है, लेकिन remote targets और image processing में platform और protocol constraints हैं

संरचना और installation

  • Ghostel emacs-libvterm के two-layer design से प्रेरित है, लेकिन libvterm की जगह Ghostty का modern VT engine इस्तेमाल करता है
    • Zig module terminal state, rendering, key encoding, local PTY और background reading handle करता है
    • Elisp keymap, buffer, command, project integration और TRAMP remote process संभालता है
  • Requirements हैं dynamic module सपोर्ट करने वाला Emacs 28.1 या ऊपर और macOS·Linux·FreeBSD या native Windows
    • Prebuilt binaries aarch64-macos, x86_64-macos, x86_64-linux, aarch64-linux, x86_64-freebsd, x86_64-windows, aarch64-windows के लिए उपलब्ध हैं
    • दूसरे platforms या source build के लिए Zig 0.15.2 चाहिए
  • इसे MELPA, Emacs 30+ के use-package :vc, :load-path, या manual require तरीके से install किया जा सकता है, और M-x ghostel से terminal खोला जाता है
  • अगर native module नहीं है, तो ghostel-module-auto-install setting के हिसाब से download या source compile का सुझाव देता है
    • M-x ghostel-download-module minimum supported binary download करता है, और prefix argument देने पर release tag चुना जा सकता है
    • M-x ghostel-module-compile zig build से module build करता है
    • अगर package directory reinstall हो सकती है, तो ghostel-module-directory को अलग location पर सेट किया जा सकता है
  • Source build में generated vendor/emacs-module.h शामिल होता है, इसलिए आम तौर पर local Emacs headers की जरूरत नहीं होती; EMACS_INCLUDE_DIR या EMACS_BIN_DIR से header location बदली जा सकती है
    • Compiled xterm-ghostty terminfo etc/terminfo/ में शामिल है और BSD व ncurses पर portable format में है

Windows support

  • Native Windows Emacs में local terminal ConPTY से चलाया जाता है, और module DLL का architecture Windows नहीं बल्कि Emacs architecture से match करना चाहिए
  • Prebuilt module के साथ conpty.dll, OpenConsole.exe support files download होती हैं; अगर ये files न हों तो Windows built-in ConPTY API पर fallback करता है
  • Static CRT जैसे special custom Emacs builds सिर्फ best-effort basis पर supported हैं
  • Windows पर TRAMP terminal केवल POSIX remote targets सपोर्ट करता है और PTY remote host पर मौजूद होता है; dynamic window resizing फिलहाल supported नहीं है

5 input modes

  • Default semi-char mode ज्यादातर keys terminal को भेजता है, लेकिन C-c, C-x, C-u, C-h, M-x, M-:, C-\ जैसी exceptions Emacs के पास छोड़ता है
    • interrupt·abort·EOF भेजने, bracketed paste, scrollback deletion, prompt और hyperlink navigation के लिए keys देता है
  • char mode सभी keys terminal को भेजता है, इसलिए C-x, M-x, C-h को खुद इस्तेमाल करने वाले TUI के लिए उपयुक्त है; सिर्फ M-RET escape key के रूप में बचता है
  • Emacs mode terminal output लेते रहकर buffer को read-only बना देता है, ताकि isearch, occur, mark और copy जैसी standard Emacs navigation allow हो
    • Normal input shell तक नहीं जाता, और सिर्फ intentional C-y paste bracketed paste के रूप में भेजा जाता है
  • copy mode terminal updates रोक देता है, ताकि selection, navigation और copy स्थिर तरीके से की जा सके
    • Copied text में soft wrapping से बने line breaks हटा दिए जाते हैं
    • Default ghostel-readonly-fast-exit=t में character input या copy के बाद अपने-आप normal terminal session में लौटता है
  • line mode keys को तुरंत shell में नहीं भेजता; Emacs buffer में एक line edit करता है और RET पर एक साथ भेजता है
    • Asynchronous output या नया prompt आने पर भी लिखे जा रहे input को snapshot के रूप में सुरक्षित रखकर फिर insert करता है
    • OSC 133 हो तो prompt boundaries इस्तेमाल करता है, नहीं तो ghostel-prompt-regexp से boundaries ढूंढता है
    • Full-screen TUI शुरू होने पर semi-char mode में switch करता है और TUI खत्म होने के बाद line mode में वापस आता है
    • TAB comint completion और optional bash programmable completion इस्तेमाल करता है
  • Mouse drag, multi-click, mark activation, isearch या consult-line से live input position के बाहर जाने पर default रूप से copy mode में switch करता है, ताकि selection और position सुरक्षित रहें
    • अगर TUI ने DEC mouse tracking चालू किया है, तो input mode में mouse events उस program को भेजता है
    • ghostel-mouse-drag-input-mode, ghostel-mark-activation-input-mode, ghostel-point-leave-input-mode से switching behavior बदला जा सकता है

Terminal features और rendering

  • libghostty-vt के जरिए full VT emulation, 256 colors और 24-bit color, alternate screen, कई underline styles और colors, bold·italic·faint·strikethrough·reverse, चार cursor shapes और blinking सपोर्ट करता है
  • Default TERM=xterm-ghostty और bundled terminfo applications को DEC 2026 synchronized output, Kitty keyboard, true color, colored underline, focus reporting जैसी capabilities बताते हैं
    • OSC 4/10/11 queries से TUI Emacs face colors से palette और foreground·background colors हासिल कर सकता है
    • OSC 52 clipboard supported है, लेकिन default रूप से disabled है, इसलिए bundled terminfo Ms capability advertise नहीं करता
  • Default scrollback 5MB, करीब 5,000 lines है और Emacs buffer के रूप में materialize होता है, इसलिए isearch और consult-line से search किया जा सकता है
  • OSC 8 hyperlinks के अलावा, सामान्य HTTP·HTTPS URL और /path/file.el:42 format के file paths detect करके clickable links बनाता है
  • Ghostty key encoder और Kitty keyboard protocol, SGR mouse events, DEC 1004 focus events, file path और text drag-and-drop सपोर्ट करता है
  • Renderer unchanged rows skip करता है, timer से updates batch करता है और frame rate को adaptively adjust करता है
    • Key input के तुरंत बाद आया PTY echo default 33ms timer bypass करके तुरंत render होता है
    • ghostel-sync-theme Emacs theme के हिसाब से palette फिर से synchronize करता है
  • 16 ANSI colors term-color-* inherit करने वाले Emacs faces हैं, और ghostel-default से terminal-specific font·size·foreground·background set किए जा सकते हैं

Shell integration और Emacs invocation

  • bash·zsh·fish·nushell में OSC 7 directory tracking, OSC 133 prompt navigation, OSC 2 title tracking और ghostel_cmd अपने-आप configure होते हैं
    • nushell का अपना shell integration OSC 7·133·2 देता है, और ghostel.nu ghostel_cmd व outbound SSH terminfo wrapper जोड़ता है
    • macOS में built-in bash 3.2 auto-injection के लिए इस्तेमाल होने वाले ENV को ignore करता है, इसलिए नया bash इस्तेमाल करना होगा या ghostel.bash को manually load करना होगा
  • Shell से Elisp call करने वाला ghostel_cmd dedicated OSC 52;e extension का उपयोग करता है और केवल ghostel-eval-cmds allowlist में मौजूद functions चलाता है
    • Default allowed functions हैं find-file, find-file-other-window, dired, dired-other-window, message
  • Emacs bookmarks terminal working directory और buffer name को save करते हैं
    • अगर मौजूदा buffer है तो उसे reuse करते हैं, नहीं तो saved directory से नया shell शुरू करते हैं
    • Scrollback और session content save नहीं किए जाते

Password·clipboard·notifications

  • sudo, ssh, gpg, passwd आदि के password prompts detect होने पर read-passwd खोलता है और जवाब सीधे PTY को भेजता है, इसलिए input view-lossage, recent key ring या keyboard macro में नहीं रहता
    • Local में canonical mode और echo disable होना tcgetattr से verify करता है
    • केवल remote shell में regex-based fallback detection का उपयोग करता है, ताकि local raw-mode TUI में false positives घटें
    • भेजने के बाद password string को तुरंत clear-string किया जाता है
    • ghostel-password-prompt-functions में auth-source, KeePass, pass जैसे sources जोड़े जा सकते हैं
  • OSC 52 को explicitly enable करने पर remote programs Emacs kill ring और system clipboard set कर सकते हैं, और paste bracketed paste के रूप में भेजा जाता है
  • OSC 9 और OSC 777 notifications ghostel-notification-function को pass की जाती हैं
    • Default handler install हो तो alert इस्तेमाल करता है, नहीं तो echo area के message पर fallback करता है
  • OSC 9;4 progress remove, set, error, indeterminate, pause states और 0~100 values pass करता है
    • Default text indicator और spinner.el based animated indicator उपलब्ध कराता है

Kitty inline images

  • Kitty graphics protocol के direct placement और U+10EEEE Unicode-placeholder placement को support करता है, जिससे timg, kitty +kitten icat, yazi आदि की images render होती हैं
  • PNG को included stb decoder से process किया जाता है, और RGB·RGBA·Gray·GrayAlpha data को native module में PPM में convert किया जाता है, इसलिए ImageMagick की जरूरत नहीं
  • CSI 14·16·18 t size queries का जवाब देता है, और ghostel-cell-pixel-scale से physical pixel ratio set किया जा सकता है
  • Image processing में ये constraints हैं
    • Alpha channel को composite नहीं किया जाता, बल्कि हटा दिया जाता है, इसलिए यह semi-transparent edges के लिए उपयुक्त नहीं है
    • Kitty source-rect partial cropping support नहीं है और explicit error लौटाता है
    • उसी buffer में multiple virtual placements एक ही rendering share करते हैं, और सबसे हालिया transfer को priority मिलती है
    • Default रूप से केवल inline base64 allow है; file, temporary file और shared memory media को security के लिए explicitly enable करना होगा
    • प्रति terminal default graphics storage limit 320MiB है

TRAMP और remote terminfo

  • अगर default-directory TRAMP path है, तो shell उसी POSIX host पर चलाया जाता है; SSH-family TRAMP methods और docker जैसे shells को ghostel-tramp-shells से specify किया जा सकता है
    • login-shell remote user का login shell getent passwd से detect करता है
    • OSC 7 directory tracking मौजूदा TRAMP method·user·multi-hop prefix को preserve करता है
    • Windows remote targets इस POSIX shell·tty path में supported नहीं हैं
  • Remote shell integration default रूप से inject नहीं होता और दो तरीके देता है
    • ghostel-tramp-shell-integration=t से temporary script भेजता है और exit पर clean up करता है
    • Permanent hosts पर etc/shell/ scripts और optionally terminfo directly install किए जा सकते हैं
  • Remote पर xterm-ghostty terminfo न हो तो terminal खोलना fail हो सकता है, इसलिए ghostel-ssh-install-terminfo installation handle करता है
    • TRAMP execution मौजूदा connection से temporary directory में terminfo भेजता है और exit पर delete करता है
    • Local Ghostel से चलाया गया ssh ssh -G से target normalize करता है, cache lookup करता है, और जरूरत पड़ने पर एक extra connection से tic -x - चलाता है
    • Local terminfo hash cache key में शामिल होता है, इसलिए libghostty update पर अपने-आप invalidate हो जाता है, लेकिन remote पर अलग से बदला गया terminfo detect नहीं कर पाता
    • ssh HOST cmd, host के बिना option calls, या local में infocmp न होने पर installation skip करता है
  • अगर remote host modify नहीं करना चाहते, तो auto-install बंद करके terminfo manually install कर सकते हैं; ghostel-term को xterm-256color में बदलने पर संबंधित config की जरूरत नहीं रहती, लेकिन Ghostty-specific synchronized output fast path भी हट जाता है

Emacs extensions

  • evil-ghostel Evil के insert·normal states और terminal cursor को synchronize करता है
    • Movement, insertion, deletion, change, replace, bracketed paste, readline undo और state-specific cursor shapes support करता है
    • alternate screen में vim·less·htop को प्रभावित नहीं करता
  • ghostel-compile actual PTY में command run करते हुए compilation-mode जैसे header·footer·error highlighting·next-error navigation देता है
    • Default read-only navigation है; prefix argument देने पर interactive input pass करता है
    • चलते समय भी C-c C-j और C-c C-e या C-c C-t से interactive input और compilation navigation के बीच switch किया जा सकता है
    • ghostel-compile-global-mode compile, recompile, project-compile और compilation-start calls को Ghostel पर भेजता है
    • grep-mode default रूप से existing implementation को बनाए रखता है
  • ghostel-eshell-visual-command-mode Eshell के vim·htop·less जैसे visual commands को term-mode के बजाय dedicated Ghostel buffer में चलाता है
  • ghostel-comint-mode comint output stream को libghostty-vt से process करता है, जिससे true color, कई तरह के underlines, OSC 8 links और OSC 7 directory updates मिलते हैं
    • यह full terminal नहीं है, इसलिए cursor placement, alternate screen, full-screen redraw छोड़ देता है और htop या less के लिए उपयुक्त नहीं है
  • ghostel-ime-mode Hangul जैसे buffer में सीधे characters insert करने वाले Elisp input methods के results को मिटाकर UTF-8 में PTY को भेजता है
    • Quail composition के दौरान rendering defer करता है ताकि buffer composition string को overwrite न करे

प्रदर्शन

  • Apple M4 Max और Emacs 32.0.50 पर वास्तविक process pipe के जरिए 1MB भेजकर और लगभग 1,000 लाइनों का scrollback बनाए रखने पर नतीजे इस प्रकार रहे
    • सामान्य ASCII: Ghostel 75MB/s, link detection disabled Ghostel 76MB/s, vterm 18MB/s, eat 6.2MB/s, built-in term 7.2MB/s
    • बहुत सारे URL वाला output: Ghostel 36MB/s, link detection disabled Ghostel 78MB/s, vterm 15MB/s, eat 4.5MB/s, term 5.9MB/s
  • URL·file path detection redraw path के बाहर एक consolidated timer में चलती है, इसलिए सामान्य output में इसकी लागत लगभग न के बराबर है, लेकिन links से भरे output में throughput लगभग आधा रह जाता है
  • निष्पक्ष तुलना के लिए ऊपर के आंकड़ों में Emacs process path का उपयोग किया गया है, और default local native PTY में Zig background thread output पढ़ता है, इसलिए लगातार बड़े dumps में यह लगभग 2 गुना तेज है
  • 10MB file को cat करने के 5 runs का median: native Ghostel लगभग 110ms, Emacs PTY Ghostel लगभग 220ms, vterm लगभग 550ms, eat लगभग 1.8 सेकंड
    • vterm और eat transfer के दौरान Emacs main thread को synchronously occupy करते हैं, लेकिन Ghostel native PTY background में parsing करता है, इसलिए UI responsive बना रहता है
  • M-x ghostel-debug-typing-latency हर key के लिए PTY, rendering और कुल latency का minimum, median, p99 और maximum मापता है

vterm·eat से अंतर

  • vterm C-आधारित libvterm native module का उपयोग करता है, और eat pure Elisp में लिखा गया है, इसलिए बिना build के portable है लेकिन throughput कम है
  • केवल Ghostel Kitty keyboard·graphics, पांच तरह के underline, OSC 8, OSC 4/10/11, OSC 9·777 notifications, OSC 9;4 progress और DEC 2026, सभी को support करता है
    • eat Sixel images support करता है लेकिन Kitty images नहीं, और vterm दोनों image protocols को support नहीं करता
  • Ghostel और eat SGR mouse events को TUI तक पहुंचाते हैं, लेकिन vterm clicks को Emacs point movement के लिए उपयोग करता है
  • Ghostel और eat line mode देते हैं, vterm नहीं देता
    • Ghostel दोनों देता है: copy mode जिसमें output रुक जाता है, और Emacs mode जिसमें output जारी रहता है
    • vterm static copy mode देता है और eat का read-only Emacs mode लगातार update होता रहता है
  • Ghostel shell integration को automatically inject करता है, लेकिन vterm और eat में scripts manually load करनी पड़ती हैं
  • password prompts को Ghostel automatically detect करता है, eat केवल manual send command देता है, और vterm input को अलग से intercept नहीं करता

internal architecture

  • local buffers में default रूप से Zig PTY खोलता है और child process बनाता है, फिर background thread में output को libghostty-vt तक भेजता है
    • अगर OSC callback या redraw की जरूरत हो, तो Lisp events को Emacs pipe में भेजा जाता है और ghostel--events-filter उन्हें process करता है
    • bulk output Emacs process filter से byte-by-byte होकर नहीं गुजरता
  • TRAMP buffers में remote creation और file handlers बनाए रखने के लिए Emacs process output लेता है और उसी terminal model में synchronously भेजता है
  • key input libghostty encoder से होकर PTY में तुरंत लिखा जाता है, और output VT parser व invalidation चरण से गुजरता है; interactive echo हो तो तुरंत, वरना consolidated timer में Renderer.zig बदली हुई rows update करता है
  • terminal rendering rows replace करने, full redraw, resize और reflow, scrollback add/delete के जरिए Emacs buffer को modify करती है, इसलिए renderer point·mark·window position preserve करने की जिम्मेदारी लेता है
    • Elisp यह policy और user intent तय करता है कि input के बाद live viewport पर जाना है या हर mode में navigation state बनाए रखनी है
    • renderer changes को Elisp के redraw से पहले/बाद वाले heuristics से correct करने पर user scroll, redisplay correction, resize और content rewrite के कारणों में फर्क करना मुश्किल हो जाता है, इसलिए इससे बचना चाहिए

testing और license

  • tests ERT-based हैं; Elisp tests Zig module के बिना चल सकते हैं, और native tag वाले tests के लिए built module चाहिए
    • Zig unit tests, full tests, Evil extension tests और quick benchmark के लिए Makefile targets दिए गए हैं
  • bugs और feature requests, pull requests GitHub repository पर स्वीकार किए जाते हैं; rendering issues के लिए reproduction command, escape sequence, Emacs version और platform information चाहिए
  • M-x ghostel-debug-info से diagnostic events collect किए जा सकते हैं
  • Ghostel GNU GPL v3 or later के तहत distributed free software है

3 टिप्पणियां

 
lum7671 1 시간 전

लगता है कोरियाई इनपुट काम नहीं कर रहा है।
Ctrl-\ दबाने पर input method कोरियाई में बदलता हुआ लगता है, लेकिन असल में input सिर्फ़ English में ही हो पा रहा है।
थोड़ा अफ़सोस है।

 
GN⁺ 2 시간 전
Lobste.rs की टिप्पणियाँ
  • मुझे लगता है Emacs terminal emulation का अंतिम जवाब Ghostel है। छोटे, एकबारगी terminal window के लिए असली Ghostty इस्तेमाल करता हूँ, और project वाले कामों के लिए ghostel-project command से उस project से जुड़ा Ghostel इस्तेमाल करता हूँ
    अगर project के लिए instance पहले से मौजूद हो, तो वह सीधे उसी instance पर switch कर देता है, इसलिए terminals के बीच आना-जाना बहुत तेज़ हो जाता है
  • Doom Emacs को फिर से try करके देखना चाहता हूँ कि integration कितना अच्छा है। पिछली बार छोड़ने की एक वजह Emacs terminal की instability थी
    • मैं भी इसे test करना चाहता हूँ। vterm में कुछ कमियाँ हैं, लेकिन terminal में भी editor commands को वैसे ही इस्तेमाल कर पाना वाकई अच्छा है
      Emacs में terminal emulator की बात आते ही अक्सर जवाब मिलता है कि cd/mv/ls/cp/rm/mkdr/... की जगह dired, और build commands की जगह compile इस्तेमाल कर सकते हो, तो इसकी ज़रूरत क्यों है। लेकिन बहुत complex काम न भी कर रहे हों, तब भी terminal ज़्यादा परिचित और flexible लगता है
      खासकर अगर Doom Emacs में terminal पर निर्भरता घटाने का तरीका बताने वाली कोई guide हो, तो उसे follow करना चाहूँगा। advanced settings से projects में तेज़ी से घूमने का तरीका हमेशा impressive लगता है
    • Emacs terminal emulation लगभग पूरी तरह usable level तक आ चुका है, फिर भी कुछ generation के terminal tools vterm जैसे environment में टूट जाते हैं, और line size calculation की problem की वजह से jj की screen कभी-कभी पूरी तरह बिगड़ जाती है, जो frustrating है
      आखिर में पास में Ghostty खोलकर रखना पड़ता है, लेकिन उम्मीद है कि किसी दिन सारे tools Emacs के अंदर सही से काम करेंगे
  • eat-eshell जैसी functionality नहीं दिखती, इसलिए मेरे लिए इसे चुनना मुश्किल है। तेज़ terminal emulation में interest है, लेकिन मैं eshell काफी इस्तेमाल करता हूँ
    eat-eshell इस्तेमाल करने पर build tools, Podman CLI जैसे terminal emulation की ज़रूरत वाले programs और TUI applications भी eshell buffer में सीधे काम करते हैं, इसलिए eshell अक्सर इस्तेमाल करने वालों के लिए यह game-changing feature है
    • मुझे जिज्ञासा है कि जो काम terminal से भी हो सकता है, उसके लिए eshell अलग से इस्तेमाल करने का use case क्या है। मैं eshell ज़्यादा इस्तेमाल नहीं करता, इसलिए अक्सर लगता है कि मैं उसका purpose miss कर रहा हूँ
 
GN⁺ 4 시간 전
Hacker News की राय
  • मैं Ghostel का maintainer हूँ। baokaola और मैं अगले हफ्ते Show HN पोस्ट करने वाले थे, लेकिन किसी ने पहले ही लिंक submit कर दिया।
    जल्दी से देखना हो तो GitHub repository ज़्यादा सुविधाजनक है: https://github.com/dakra/ghostel
    Ghostel libghostty-vt पर आधारित Emacs terminal emulator है, और vterm तथा eat के साथ feature comparison यहाँ देखा जा सकता है: https://dakra.github.io/ghostel/#ghostel-vs-vterm। performance और correctness की image-based comparison भी है: https://gist.github.com/dakra/4a0b76ebcf5d52338e134864378465...
    व्यक्तिगत रूप से मैंने vterm/eat ही नहीं, बल्कि kitty और Ghostty जैसे external terminals को भी replace कर दिया है। terminal text को सामान्य Emacs buffer की तरह treat करने पर ऐसी बहुत-सी extensibility खुलती है जो दूसरे terminals में नहीं होती। scrollback में search करने के बाद सिर्फ keyboard से navigate करना और paragraph select करके copy करना जैसे साधारण काम भी Emacs users के लिए कहीं ज़्यादा natural और तेज़ हैं।
    Ghostel इस्तेमाल करके भी अगर आप external terminal बनाए रखते हैं, तो मुझे जानना है कि वजह missing features हैं या कुछ processes को Emacs के बाहर चलाने की इच्छा। GitHub पर भी हम सक्रिय रूप से respond कर रहे हैं, इसलिए कोई समस्या हो तो issue खोलें।

    • अब तक Ghostel बहुत अच्छे से काम कर रहा है। मैंने f1 को semi-char mode और copy mode के बीच switch करने के लिए assign किया है, और command चलाने से पहले सोचता हूँ: “अगर Emacs मर जाए या force quit हो जाए तो क्या ठीक रहेगा?” अगर नहीं, तो उसे normal terminal में चलाता हूँ।
    • Magit वगैरह बड़े diff parse करते समय पूरा Emacs freeze हो सकता है, इसलिए अंत में अलग terminal बनाए रखना पड़ता है।
    • eshell में दूसरे Emacs buffers की तरह ही text manipulate किया जा सकता है। अगर words को quotes में wrap करने वाला function किसी key से bind किया हो, तो वह eshell में भी वैसे ही काम करता है, और evil-mode, xah-fly-keys, ispell सब इस्तेमाल किए जा सकते हैं—यह निर्णायक फायदा है।
      Ghostel उसी स्तर पर integrate नहीं हुआ है, और evil-ghostel-mode जैसे extensions की भी सीमाएँ हैं। क्या इसे सुधारने की कोई योजना है, या यह architectural constraint है जिसे स्वीकार करना होगा? eat-eshell-mode के equivalent feature आ जाए तो शानदार होगा।
    • WezTerm का pattern-based Quick-select mode हो तो अच्छा रहेगा। इस feature के बारे में जानने के बाद से मेरा दूसरे terminals इस्तेमाल करने का मन ही नहीं करता।
    • Doom Emacs में काफी समय से अच्छी तरह इस्तेमाल कर रहा हूँ। Lazygit या Reasonix जैसे screen scroll करने वाले programs दूसरे emulators में fail होते हैं, लेकिन Ghostel में क्यों काम करते हैं—यह जानना चाहता हूँ। क्या implementation या library में कोई special handling है?
  • Title में Emacs होना चाहिए। general terminal emulator और Emacs के लिए terminal emulator अलग चीज़ें हैं।

    • अगर कोई project से परिचित नहीं है, तो documentation की बजाय https://github.com/dakra/ghostel पर link करना ज़्यादा उपयोगी है।
    • .el Emacs Lisp file extension है।
  • हाल ही में vterm से Ghostel पर switch किया, और कुल मिलाकर यह काफी बेहतर है। हर frame पर पूरा terminal refresh करने वाली fancy TUI apps भी ठीक चलती हैं—इतना noticeably faster है; input handling ज़्यादा stable है और ELisp API भी अच्छी है।
    हालांकि कभी-कभी terminal ठीक से clear नहीं होता, जिससे current prompt के ऊपर garbage बच जाता है, या यह पूरी तरह freeze हो गया और buffer बंद करके फिर से start करना पड़ा। daily use के लिए काफी है और outlook भी promising है, लेकिन mature product बनने के लिए bug fixes और polish की और ज़रूरत है।

    • मैं Ghostel का co-maintainer हूँ। reproduction steps न भी हों, फिर भी अगर actionable information मिले तो issue दर्ज करें या किसी और तरीके से हमें बताएं।
      screen के ऊपर garbage बचने वाली समस्या https://github.com/dakra/ghostel/issues/495 हो सकती है; latest version में यह fix हो चुकी है, लेकिन कोई दूसरा bug भी हो सकता है। मुश्किल हिस्सा libghostty-vt के internal data को Emacs buffer में replicate करना और सिर्फ ज़रूरी parts replace करना है। इसे व्यापक रूप से verify करने के लिए property-based tests हैं, लेकिन कभी-कभी issues निकल जाते हैं।
      current latest release में lifecycle handling बेहतर हुई है, जिससे कुछ समस्याएँ साथ में हल हो गई होंगी। अभी early stage है, इसलिए हम धीरे-धीरे इसे polish करना चाहते हैं।
  • अलग-अलग input modes को efficiently इस्तेमाल करने के real examples हों तो अच्छा होगा। terminal हर key input चाहता है और editor भी अपने commands के लिए keys इस्तेमाल करना चाहता है, इसलिए editor-embedded terminal में keyboard ownership switch करने वाला mode अनिवार्य है।
    Neovim के :term में सिर्फ दो modes हैं, लेकिन Ghostel में पाँच क्यों हैं—अगर यह समझ न आए तो इसे over-engineered समझना आसान है। असल में यह ज़्यादा problems solve करता है, इसलिए complex है; extra modes उन tasks के लिए optional tools हैं जिन्हें nvim handle नहीं करता। हालांकि यह advantage practically efficiently कैसे इस्तेमाल किया जाए, यह अभी पर्याप्त रूप से clear नहीं है।

  • vterm इस्तेमाल करने में दिक्कत आ रही थी, तब Ghostel try किया और यह शानदार लगा—शायद यह मेरा primary terminal बन सकता है।

    • vterm से eat होते हुए Ghostel पर आया हूँ, और कम से कम अब तक मुझे लगता है कि Ghostel सबसे अच्छा है
  • एक महीने से ज़्यादा समय से इस्तेमाल कर रहा हूँ, और Codex summary में आए code references पर click करके उन्हें सीधे Emacs buffer में खोलने का feature खास तौर पर अच्छा है।

    • mouse के अलावा ghostel-previous-hyperlink या ghostel-next-hyperlink से recently displayed hyperlinks के बीच जल्दी move किया जा सकता है।
      repeat-mode map भी install होता है, इसलिए अगर output में तीन URL या file links हों, तो सिर्फ C-c C-p p p RET से पहला link खोल सकता हूँ—मैं इसे अक्सर इस्तेमाल करता हूँ।
  • Ghostel और Claude Code integration की वजह से मेरा Emacs usage काफी बढ़ गया है, और अब Emacs मेरे काम का central hub बन गया है।

    • यहाँ integration का मतलब क्या यह है कि model server के जरिए Emacs को सीधे manipulate करता है?
  • कुछ windows में करीब 10 terminals खोलने पर Ghostty लगभग हर रात crash हो जाता था। इसलिए मैं Ghostty ठीक से use नहीं कर पाया, और इसे अपने daily tools के अंदर embed भी नहीं करना चाहता।

    • Gentoo Linux पर Ghostty 1.1.3 इस्तेमाल कर रहा हूँ, और अभी लगभग 12 windows में हर window पर करीब 20 tabs खोलकर 100 से ज़्यादा shell instances चला रहा हूँ।
      लाखों files वाले file system पर जितने shells में हो सके ls -lR भी चलाया, लेकिन कोई problem या crash नहीं हुआ। कई महीनों तक रोज़ पूरे दिन heavy use के बावजूद crash या suspicious behavior नहीं देखा।
      यह किसी specific Ghostty version का bug रहा होगा, या GPU driver जैसे दूसरे software के साथ कोई unusual interaction। यहाँ मैं NVIDIA GPU इस्तेमाल कर रहा हूँ।
  • कहा गया है कि “native modules prebuilt binaries हैं और पहली बार इस्तेमाल पर automatically download होते हैं”; मुझे समझ नहीं आता कि इन्हें distribution package में शामिल क्यों नहीं किया जाता

    • MELPA और ELPA में platform-specific files attach करने का कोई तरीका नहीं है और सब कुछ Git checkout के रूप में distribute होता है। distribution में शामिल करना हो तो सभी platforms के module binaries repository में डालने पड़ेंगे, जिनका total 10MB से ज़्यादा होगा।
      Emacs native modules इस्तेमाल करने वाला popular package jinx भी vterm की तरह first use पर compile करने का तरीका देता है। इसलिए Emacs packages में user-friendly installation support करने के लिए practically पहली run पर download या compile करने के अलावा कोई रास्ता नहीं है।