Ghostel.el - libghostty-आधारित Emacs terminal emulator
(dakra.github.io)- Ghostel एक Emacs terminal emulator है जो Ghostty जैसा
libghostty-vtengine इस्तेमाल करता है; इसमें 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
cattask को लगभग 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 चाहिए
- Prebuilt binaries
- इसे MELPA, Emacs 30+ के
use-package :vc,:load-path, या manualrequireतरीके से install किया जा सकता है, औरM-x ghostelसे terminal खोला जाता है - अगर native module नहीं है, तो
ghostel-module-auto-installsetting के हिसाब से download या source compile का सुझाव देता हैM-x ghostel-download-moduleminimum supported binary download करता है, और prefix argument देने पर release tag चुना जा सकता हैM-x ghostel-module-compilezig 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-ghosttyterminfoetc/terminfo/में शामिल है और BSD व ncurses पर portable format में है
- Compiled
Windows support
- Native Windows Emacs में local terminal ConPTY से चलाया जाता है, और module DLL का architecture Windows नहीं बल्कि Emacs architecture से match करना चाहिए
- Prebuilt module के साथ
conpty.dll,OpenConsole.exesupport 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-RETescape key के रूप में बचता है - Emacs mode terminal output लेते रहकर buffer को read-only बना देता है, ताकि
isearch,occur, mark और copy जैसी standard Emacs navigation allow हो- Normal input shell तक नहीं जाता, और सिर्फ intentional
C-ypaste bracketed paste के रूप में भेजा जाता है
- Normal input shell तक नहीं जाता, और सिर्फ intentional
- 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 में वापस आता है
TABcomint 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
Mscapability advertise नहीं करता
- Default scrollback 5MB, करीब 5,000 lines है और Emacs buffer के रूप में materialize होता है, इसलिए
isearchऔरconsult-lineसे search किया जा सकता है - OSC 8 hyperlinks के अलावा, सामान्य HTTP·HTTPS URL और
/path/file.el:42format के 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-themeEmacs 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.nughostel_cmdव outbound SSH terminfo wrapper जोड़ता है - macOS में built-in bash 3.2 auto-injection के लिए इस्तेमाल होने वाले
ENVको ignore करता है, इसलिए नया bash इस्तेमाल करना होगा याghostel.bashको manually load करना होगा
- nushell का अपना shell integration OSC 7·133·2 देता है, और
- Shell से Elisp call करने वाला
ghostel_cmddedicated OSC 52;e extension का उपयोग करता है और केवलghostel-eval-cmdsallowlist में मौजूद functions चलाता है- Default allowed functions हैं
find-file,find-file-other-window,dired,dired-other-window,message
- Default allowed functions हैं
- 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 को भेजता है, इसलिए inputview-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 जोड़े जा सकते हैं
- Local में canonical mode और echo disable होना
- 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 करता है
- Default handler install हो तो alert इस्तेमाल करता है, नहीं तो echo area के
- OSC 9;4 progress
remove,set,error,indeterminate,pausestates और 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
tsize 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-directoryTRAMP path है, तो shell उसी POSIX host पर चलाया जाता है; SSH-family TRAMP methods औरdockerजैसे shells कोghostel-tramp-shellsसे specify किया जा सकता हैlogin-shellremote user का login shellgetent 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-ghosttyterminfo न हो तो terminal खोलना fail हो सकता है, इसलिएghostel-ssh-install-terminfoinstallation handle करता है- TRAMP execution मौजूदा connection से temporary directory में terminfo भेजता है और exit पर delete करता है
- Local Ghostel से चलाया गया
sshssh -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-compileactual PTY में command run करते हुएcompilation-modeजैसे header·footer·error highlighting·next-errornavigation देता है- 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-modecompile,recompile,project-compileऔरcompilation-startcalls को Ghostel पर भेजता हैgrep-modedefault रूप से existing implementation को बनाए रखता है
ghostel-eshell-visual-command-modeEshell के vim·htop·less जैसे visual commands कोterm-modeके बजाय dedicated Ghostel buffer में चलाता हैghostel-comint-modecomint 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के लिए उपयुक्त नहीं है
- यह full terminal नहीं है, इसलिए cursor placement, alternate screen, full-screen redraw छोड़ देता है और
ghostel-ime-modeHangul जैसे 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 होकर नहीं गुजरता
- अगर OSC callback या redraw की जरूरत हो, तो Lisp events को Emacs pipe में भेजा जाता है और
- 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 के बिना चल सकते हैं, और
nativetag वाले 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 टिप्पणियां
लगता है कोरियाई इनपुट काम नहीं कर रहा है।
Ctrl-\दबाने पर input method कोरियाई में बदलता हुआ लगता है, लेकिन असल में input सिर्फ़ English में ही हो पा रहा है।थोड़ा अफ़सोस है।
Lobste.rs की टिप्पणियाँ
ghostel-projectcommand से उस project से जुड़ा Ghostel इस्तेमाल करता हूँअगर project के लिए instance पहले से मौजूद हो, तो वह सीधे उसी instance पर switch कर देता है, इसलिए terminals के बीच आना-जाना बहुत तेज़ हो जाता है
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 लगता है
vtermजैसे environment में टूट जाते हैं, और line size calculation की problem की वजह सेjjकी screen कभी-कभी पूरी तरह बिगड़ जाती है, जो frustrating हैआखिर में पास में Ghostty खोलकर रखना पड़ता है, लेकिन उम्मीद है कि किसी दिन सारे tools Emacs के अंदर सही से काम करेंगे
eshellकाफी इस्तेमाल करता हूँeat-eshellइस्तेमाल करने पर build tools, Podman CLI जैसे terminal emulation की ज़रूरत वाले programs और TUI applications भीeshellbuffer में सीधे काम करते हैं, इसलिएeshellअक्सर इस्तेमाल करने वालों के लिए यह game-changing feature हैeshellअलग से इस्तेमाल करने का use case क्या है। मैंeshellज़्यादा इस्तेमाल नहीं करता, इसलिए अक्सर लगता है कि मैं उसका purpose miss कर रहा हूँ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 खोलें।
f1को semi-char mode और copy mode के बीच switch करने के लिए assign किया है, और command चलाने से पहले सोचता हूँ: “अगर Emacs मर जाए या force quit हो जाए तो क्या ठीक रहेगा?” अगर नहीं, तो उसे normal terminal में चलाता हूँ।Ghostel उसी स्तर पर integrate नहीं हुआ है, और evil-ghostel-mode जैसे extensions की भी सीमाएँ हैं। क्या इसे सुधारने की कोई योजना है, या यह architectural constraint है जिसे स्वीकार करना होगा? eat-eshell-mode के equivalent feature आ जाए तो शानदार होगा।
Title में Emacs होना चाहिए। general terminal emulator और Emacs के लिए terminal emulator अलग चीज़ें हैं।
.elEmacs 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 की और ज़रूरत है।
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 बन सकता है।
एक महीने से ज़्यादा समय से इस्तेमाल कर रहा हूँ, और Codex summary में आए code references पर click करके उन्हें सीधे Emacs buffer में खोलने का feature खास तौर पर अच्छा है।
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 बन गया है।
कुछ windows में करीब 10 terminals खोलने पर Ghostty लगभग हर रात crash हो जाता था। इसलिए मैं Ghostty ठीक से use नहीं कर पाया, और इसे अपने daily tools के अंदर embed भी नहीं करना चाहता।
लाखों 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 में शामिल क्यों नहीं किया जाता।
Emacs native modules इस्तेमाल करने वाला popular package jinx भी vterm की तरह first use पर compile करने का तरीका देता है। इसलिए Emacs packages में user-friendly installation support करने के लिए practically पहली run पर download या compile करने के अलावा कोई रास्ता नहीं है।