- टर्मिनल Emacs में Solarized जैसी थीम को सही तरह देखने के लिए 24-बिट रंग अपने आप से ज्यादा यह महत्वपूर्ण है कि terminal, terminfo, tmux और mosh एक ही color capability को अंत तक समझते हैं या नहीं
- RGB रंग
ESC[38;2;<r>;<g>;<b>mरूप में व्यापक रूप से इस्तेमाल होते हैं, लेकिन standard के ज्यादा करीब colon syntax और वास्तविक implementations में फैले semicolon syntax दोनों बने रहने से compatibility जटिल हो जाती है xterm-256colorऔरxterm-directक्रमशः 256-color palette और 16,777,216 रंगों का विज्ञापन करते हैं, लेकिन terminfo का palette-केंद्रित model direct RGB colors को साफ़ तरीके से व्यक्त नहीं कर पाता- वास्तविक environments में
ncurses-termके-directentries,tmux-direct, mosh 1.4 series,vscode-directजैसे वैकल्पिक TERM values की जरूरत पड़ सकती है, और कुछ layers अब भी केवल semicolon तरीका स्वीकार करती हैं - आधुनिक terminal capabilities को भरोसेमंद तरीके से इस्तेमाल करने के लिए सिर्फ TERM और terminfo काफी नहीं हैं; terminal name और version के हिसाब से capabilities को ज्यादा तेजी से update करने वाली अलग representation की जरूरत है
टर्मिनल Emacs में 24-बिट रंगों की जरूरत क्यों है
- graphical environment में Emacs अपने-आप 24-बिट रंग support करता है और Solarized जैसी themes और fonts को सही दिखाता है
- terminal में वही theme इस्तेमाल करने पर color expression सीमित हो सकता है, जिससे screen कम आकर्षक दिख सकती है
- लोकप्रिय terminals लंबे समय से 24-बिट रंग support करते आए हैं, लेकिन program द्वारा उनका उपयोग करने के लिए capability detection और settings दोनों सही होने चाहिए
- लक्ष्य दो हैं
- मौजूदा terminal environment में truecolor support चालू करने का तरीका खोजना
- यह देखना कि Emacs color समस्या 1970–1990 के दशक के terminal standards से कैसे जुड़ती है
ANSI escape codes और color extension का इतिहास
- शुरुआती hardware terminals अलग-अलग control code systems इस्तेमाल करते थे, और portable software बनाने के लिए ANSI standardization की जरूरत थी
- ANSI escape codes 1970 के दशक से चले आ रहे हैं, और colors में SGR(Select Graphics Rendition) मुख्य है
- bold या brightness
- italic
- blink
- foreground color और background color
- अन्य character display attributes
- शुरुआत में colors RGB cube के 8 vertices के बराबर 3-bit colors थे
- black, white, additive primary colors और subtractive primary colors शामिल थे
- बाद में bright color या bold bit जुड़ने से यह 16 colors तक बढ़ा
- “bright black” गहरे gray के बराबर है
- 1999 में Todd Larason ने xterm में 256-color support patch जोड़ा
- 6x6x6 RGB color cube sampling
- 24-step grayscale ramp
- एक दुर्लभ लेकिन अब भी supported 88-color variant भी मौजूद है
24-बिट color syntax कैसे बना
- 8-bit colors और 24-bit colors compatible terminals में निम्न रूपों में set किए जाते हैं
ESC[38;5;<n>m: palette के color numbernको foreground color के रूप में set करता हैESC[38;2;<r>;<g>;<b>m: RGB valuesr,g,bको foreground color के रूप में set करता है
- संख्या
5और2ISO 8613-6, यानी ITU T.416 के extended color modes से जुड़ी हैं2: RGB space का direct color5: indexed color
- standardization flow इस प्रकार है
- 1970s: ANSI ने terminal escape sequences को standardize किया, जिससे ANSI X3.64 और ECMA-48 बने
- 1979: ECMA-48 2nd edition ने SGR 30~37, 40~47 को 3-bit foreground और background colors को assign किया
- 1984: ECMA-48 3rd edition ने default foreground और background color concepts पेश किए और 39, 49 assign किए
- 1991: ECMA-48 5th edition ने 38 और 48 को “future standardization” के लिए छोड़ा और ISO 8613-6 को clue के रूप में रखा
- 1993: ISO 8613-6 ने 38 और 48 को extended foreground/background color modes के रूप में define किया
- sub-parameters अलग करने के लिए colon का उपयोग standard के ज्यादा करीब है, लेकिन वास्तविक implementations ने semicolon को व्यापक रूप से अपनाया
ESC[38;5;3mSGR 38 न जानने वाले terminal में38,5,3जैसे अलग parameters के रूप में interpret हो सकता है- Thomas Dickey की xterm FAQ बताती है कि उस समय ITU T.416 की copies महंगी थीं, और RGB values को अन्य SGR parameters की तरह semicolon से अलग करना गलती थी
- संबंधित timeline इस प्रकार है
- 1999: Thomas Dickey ने Todd Larason का 256-color patch xterm में merge किया, और ambiguous semicolon syntax शामिल हो गया
- 2006: Konsole ने xterm जैसे semicolon syntax के साथ 256-color और 24-bit truecolor support किया
- 2012: xterm को standard के ज्यादा करीब colon syntax भी स्वीकार करने के लिए modify किया गया
- 2016: Windows 10 built-in console ने ANSI escape codes और 24-bit colors support किए, लेकिन semicolon syntax इस्तेमाल किया
- 2019: Windows Terminal भी ANSI escape codes support करता है, लेकिन semicolon syntax इस्तेमाल करता है
- 2022: Microsoft ने legacy VGA-style console subsystem से ANSI terminal emulation की ओर ecosystem transition की घोषणा की
- 2022: Konsole ने standards-compatible colon syntax support किया
terminfo color capabilities को कैसे व्यक्त करता है
- terminfo terminal capability database और उपयुक्त escape sequences generate करने की capability देता है
TERMenvironment variable उस terminfo record की ओर इशारा करता है जिसे program इस्तेमाल करेगा, औरsshconnection में भी अपने-आप forward होता हैtoeinstalled terminfo records की list दिखाता है, औरinfocmpकिसी खास record की capabilities check करने के लिए इस्तेमाल होता है- color से जुड़ी तीन important capabilities हैं
colors: terminal द्वारा supported colors की संख्याsetaf: foreground color settingsetab: background color setting
xterm-256colorकाsetafcolor number के हिसाब से अलग sequences निकालता है- 0~7: ANSI 30~37 SGR parameters का उपयोग
- 8~15: non-standard 90~97 bright colors का उपयोग
- उससे आगे:
38;5;<n>रूप में 256-color palette का उपयोग
xterm-direct24-bit RGB के लिए terminfo entry है, जोcolorsको 16,777,216 के रूप में advertise करता है- यह
cccको बंद करता है, जिससे संकेत मिलता है कि color indexes को नए RGB values assign नहीं किए जा सकते initc,oc,rs1जैसे runtime color-change related entries भी गायब हैंsetafऔरsetabcolon-based38:2::...form इस्तेमाल करते हैं
- यह
terminfo के direct color model की सीमाएं
- terminfo और ncurses का programming model मूल रूप से palette entries केंद्रित है
- N palette entries होते हैं
- हर entry में default RGB value होती है
- यह model मानता है कि terminal इस value को बदल सकता है
-directterminal 24-bit colors दिखाने के लिए ऐसा प्रस्तुत करता है जैसे 16,777,216 palette entries हों- हर entry 8:8:8 RGB cube से मेल खाती है
- values बदली नहीं जा सकतीं
- compatibility के लिए
xterm-directतरीका सबसे गहरे blue के 7 values को default ANSI 8 colors के साथ compatibility के लिए उपयोग करता है- black शामिल नहीं है
- यह ऐसे मामलों से बचने की व्यवस्था है जहां पुराने programs
setafका meaning assume करते हुए लगभग अदृश्य dark blue output कर दें
- इस वजह से
-directतरीका और-256colorतरीका आपस में compatible नहीं हैं- program को पता होना चाहिए कि 256 colors indexed colors हैं और 16,777,216 colors direct colors हैं
- सबसे गहरे blue के 7 values से बचने वाला exception भी है
- termwiz से जुड़ी समस्या में program xterm-256color palette की उम्मीद कर रहा था, लेकिन असल में पढ़ने में कठिन dark blue range output कर रहा था
- वह issue लिखे जाने के समय open था, लेकिन @quark-zju ने fix शामिल किया और अब termwiz reasonable तरीके से काम करता है
- मुख्य बात terminal itself से ज्यादा terminfo constraints के करीब है
- 24-bit color support करने वाले terminals xterm 256-color palette और RGB values dynamic changes भी support करते प्रतीत होते हैं
- terminfo modern terminal emulator ecosystem को accurate और जल्दी express करने के लिए पर्याप्त नहीं है
TERM settings और semicolon compatibility
- बहुत सारे programs terminfo इस्तेमाल करते हैं, इसलिए
TERMvalue सही set होनी चाहिए - colon-based SGR syntax पर standardize करना चाहें तब भी कई environments अब भी केवल semicolon syntax support करते हैं
- terminfo entries building blocks से बनी होती हैं
xterm+direct: standard के ज्यादा करीब colon syntaxxterm+indirect: केवल semicolon support करने वाले legacy terminals के लिए
xterm+indirectखोजने परvscode-directसबसे उपयुक्त लगा- क्योंकि यह Microsoft terminals को target करता है, इसलिए Windows Terminal और Windows Console के काफी करीब माना गया
- सभी capabilities audit नहीं की गईं, लेकिन यह काम करता है
- कई servers में
-directterminfo entries installed नहीं हो सकते- अधिकांश systems में default terminfo database
ncurses-basepackage में होता है - extended terminal entries के लिए
ncurses-termpackage चाहिए
- अधिकांश systems में default terminfo database
- लिखते समय ncurses में
winconsoleterminfo entry जोड़ी गई थी, लेकिन यह 24-bit color support नहीं करती और अभी तक किसी ncurses version में release नहीं हुई है
Emacs truecolor कैसे detect करता है
- Emacs ने TTY में truecolor support detect करने का तरीका document किया है
M-x eval-expressionमें(display-color-cells)चलाने पर check किया जा सकता है कि Emacs 16,777,216 colors पहचानता है या नहीं- Emacs documentation
-directmode की terminfo limitations भी cover करता हैRGBcapability वाले terminals#000001से#000007तक को direct RGB के बजाय indexed colors की तरह treat कर सकते हैं- यह direct color न जानने वाले applications के साथ backward compatibility बनाए रखने के लिए है
- अगर यह समस्या बने तो
setb24,setf24वाली custom terminal definition इस्तेमाल की जा सकती है
- Emacs पहले
setf24औरsetb24strings खोजता है, और न मिलने परRGBको fallback capability के रूप में इस्तेमाल करता है - जांचे गए system के terminfo entries में
setf24शामिल नहीं था
nested terminals में सभी layers का मेल खाना जरूरी है
- सामान्य workflow कई terminal layers को nest करता है
- local desktop पर graphical terminal emulator खोलना
- remote machine या VM में mosh से connect करना
- tmux start करना
- Emacs internal terminal, Asciinema, GNU Screen आदि को अतिरिक्त रूप से इस्तेमाल करना
- हर layer अपनी ANSI escape sequence state machine implement करती है
- 24-bit colors चलाने के लिए सभी layers को inner
TERMvalue के terminfo से generated escape sequences समझने चाहिए और outer terminfo के अनुसार सही तरीके से pass करना चाहिए - इसलिए संबंधित software sufficiently recent होना चाहिए
- मौजूदा Ubuntu LTS mosh 1.3 देता है, इसलिए mosh-dev PPA enable करना पड़ा
- हर layer के अंदर
TERMभी accurate होना चाहिए- tmux के अंदर
tmux-directइस्तेमाल करें - mosh के लिए standard terminfo नहीं है, इसलिए sufficiently close value चुनना होगा
- tmux के अंदर
environment-specific settings
-
graphical terminal emulator
- ज्यादातर terminals appropriate default
TERMset करते हैं या user को override करने देते हैं - Konsole में
TERMvalue चुनने का option है
- ज्यादातर terminals appropriate default
-
ssh
sshTERMvalue को नए shell में forward करता है- remote host में वही terminfo record हो तो configuration relatively simple है
-
tmux
- tmux चलाने पर
TERMscreenपर set हो सकता है - इसे
~/.tmux.confमें default terminal बदलकर हल किया जाता है
set -g default-terminal "tmux-direct"- यह भी consider किया जा सकता है कि outer
TERM24-bit colors support करने पर ही conditionallytmux-directset करें, वरनाscreenयाtmux-256colorबनाए रखें
- tmux चलाने पर
-
mosh
- latest mosh 24-bit colors support करता है, लेकिन खुद केवल 8-color या 256-color advertise करता है
- इसलिए user को
TERMउचित रूप से set करना होगा - mosh xterm compatibility target करता है, लेकिन SGR 38 और 48 में केवल semicolon syntax support करता है
TERM=xterm-directकाम नहीं करताvscode-directकोxterm-directके सबसे करीबी alternative के रूप में इस्तेमाल किया गया- mosh चल रहा है या नहीं बताने वाला convenient variable नहीं है, इसलिए
detect-mosh.rsscript लिखकर.bashrcसे call किया गया - यह check करने का तरीका है कि shell process
mosh-serverका child है या नहीं - login path में Rust compile करने वाला तरीका low-performance hosts के लिए उपयुक्त है या नहीं, यह तय नहीं किया गया
अंतिम परिणाम और बची समस्याएं
- settings के बाद tmux और mosh के अंदर Emacs में भी theme 24-bit colors में दिखती है
- बची समस्याएं तीन बिंदुओं में summarized हैं
- terminals syntax और capabilities पर पूरी तरह सहमत नहीं हैं
- terminfo capability lookup का standard path है
- terminfo सीमित और कभी-कभी inaccurate है, और नए version releases भी बार-बार नहीं आते
terminfo के बाद की दिशा
- modern terminal capabilities का पूरा फायदा उठाने वाले software को terminfo से आगे जाने की जरूरत है
- संभावित directions इस प्रकार हैं
- व्यापक रूप से supported
TERMvariable का उपयोग जारी रखें - OS या distribution के पुराने terminfo पर ही निर्भर न रहकर program को terminal capabilities स्वतंत्र रूप से जानने दें
- अक्सर update होने वाली library में पिछले लगभग 10 वर्षों के terminal emulator information को name और version के आधार पर रखें
- अब इस्तेमाल करना कठिन hardware terminal support शामिल न करें
- OS-provided terminfo files और terminfo file format को support जारी रखें, लेकिन कौन-सी जानकारी latest है यह तय करने के लिए protocol रखें
- optional
TERMVERSIONसे 2022 Konsole और 2023 Konsole जैसी version-specific capability differences अलग करें - 24-bit colors, 256-color palette animation, URL links, Kitty graphics protocol जैसी modern capabilities को स्पष्ट रूप से express करें
- व्यापक रूप से supported
- legacy programs के लिए backward-compatible तरीका भी संभव है
.bashrcसे चलने वाला programTERMऔरTERMVERSIONका उपयोग करके$HOME/.terminfo/में binary terminfo file generate करेRGB,setf24,setb24जैसी स्पष्ट 24-bit color capabilities generate करे- RGB न जानने वाले programs को 256-color palette assume करने वाला मानकर
colors#0x100,initc,ocबनाए रखे
1 टिप्पणियां
Hacker News टिप्पणियाँ
terminfo को खंगालना ऐसा लगता है जैसे किसी गहरे भूमिगत मकबरे में टिमटिमाती मशाल से चित्रलिपि पढ़ रहे हों
यह अजीब है कि एक टर्मिनल ऐप में कितनी जटिलता भरी होती है, और इससे iTerm और Kitty जैसे टर्मिनल डेवलपर्स के लिए और ज़्यादा आभार महसूस होता है
iTerm+zsh में टैब रंग सेट करने वाले functions यहाँ संकलित हैं: https://gist.github.com/aclarknexient/84ebe33c1879f921685304...
पहले की तरह telnet से HTTP या SMTP में जुड़ने के तरीकों से तुलना करें, तो टेक्स्ट खुद भले सरल हो, लेकिन उस टेक्स्ट को दिखाने वाला हिस्सा हर तरह की सुविधाएँ सँभालने वाला एक जटिल application है
यह अभी इसलिए संभव है क्योंकि उस टर्मिनल का उपयोगकर्ता लगभग सिर्फ मैं ही हूँ, लेकिन आधुनिक टर्मिनल काफ़ी बड़ा common subset सपोर्ट करते हैं, इसलिए apps का अनजान
TERMवैल्यू देखकर भ्रमित होना उससे भी ज़्यादा दर्दनाक हैबेशक, अगर आप नए सिस्टम में अक्सर SSH से लॉगिन नहीं करते, तो यह कम महत्वपूर्ण समस्या है
यह सबसे तेज़ terminal emulator नहीं है, लेकिन दिखने में यह बहुत आगे है
अलग-अलग terminal apps में 16-रंग palette को समायोजित करना, application-side terminal code को ठीक-ठीक मिलाने से आसान लगा
~/.Xdefaultsमें rxvt-unicode के रंग सेट किए, और Emacs theme.elमें graphic display है या नहीं उसके आधार पर अलग रंग नाम तय करके कई faces पर लागू कियाबोनस के तौर पर रंगों वाला
lsoutput भी ज़्यादा अच्छा दिखने लगा। डिफ़ॉल्ट 16-रंग palette अक्सर बहुत ज़्यादा saturated होती है और उसका contrast भी खराब होता है(if (display-graphic-p)ही हैEmacs सच में graphic output सपोर्ट करता है, और X11/Cocoa/Win32 में Esc सचमुच Esc की तरह काम करता है, साथ ही Ctrl+Shift या Cmd bindings, एक साथ कई fonts का उपयोग, images दिखाना, cursor shape बदलना आदि भी संभव हैं
यह मानो आपको 20 साल आगे, यानी 1989 में ले जाने वाली टाइम मशीन हो
लाल लाइन या तो तेज़ लाल होती थी या बंद, और intensity लाइन जुड़ने पर वह 100% लाल बन जाती थी
DIRCOLORSमें sequences डालें, तोlsभी वास्तव में 24-bit color सपोर्ट करता हैबेस रंग dark background की तुलना में बहुत गहरे थे, इसलिए मैंने सभी रंगों की luminance बढ़ा दी
अगर लेखक को
export COLORTERM=truecolorपता होता, तो शायद उसे बहुत कम परेशानी होतीlinked Emacs दस्तावेज़ के truecolor detection footnote में भी यह आता है और Konsole screenshot में भी दिखता है, लेकिन संभव है कि terminal multiplexer की कई परतों के भीतर यह गायब हो गया हो
यह वैल्यू सेट करने पर apps तुरंत समझ लेते हैं कि truecolor चाहिए, इसलिए मुश्किल हिस्से छोड़े जा सकते हैं और terminfo database की भी ज़रूरत नहीं पड़ती
RGBterminfo feature जैसी trial-and-error बातें भी शामिल होनी चाहिए थींहालांकि सभी programs COLORTERM का सम्मान नहीं करते, इसलिए मैंने
.bashrcमेंlinux | screen*होने परCOLORTERMunset किया था और बाकी मेंCOLORTERM=truecolorexport किया थाआजकल Screen 24-bit color सपोर्ट करता है, तो शायद यह Ubuntu 18 के समय की setting रही होगी
trampयाsshfsके साथ इस्तेमाल कर सकते हैंएक वजह यह भी है कि ncurses maintainer काफ़ी conservative है, जबकि नए terminal developers तेज़ी से आगे बढ़ना चाहते हैं
उससे पुराने Emacs में अब भी terminfo database चाहिए
ज़्यादातर समय इसे define करने की ज़रूरत नहीं होती, लेकिन screen session में अगर
COLORTERM=truecolorसेट हो, तो अचानक स्क्रीन बहुत अजीब दिखने लगती है, और environment variable हटा दें तो सब फिर सामान्य दिखता हैEmacs के साथ काम करते समय ज़रूरी नहीं कि टर्मिनल ही इस्तेमाल किया जाए
MacOS, Windows, X.org, Wayland के लिए ग्राफिकल फ्रंटएंड इस्तेमाल किए जा सकते हैं
ग्राफिकल Emacs, अगर toolbar बंद हो, तो टर्मिनल में चलने वाले Emacs जैसा इतना मिलता-जुलता दिखता है कि Emacs को न जानने वाला कोई व्यक्ति सहकर्मी के कंप्यूटर पर दिख रही ग्राफिकल Emacs विंडो को टर्मिनल विंडो समझ सकता है
Emacs user survey में 80% लोगों ने कहा कि वे ग्राफिकल फ्रंटएंड इस्तेमाल करते हैं
xterm-mouse-modeसे भी 80% फायदे मिल सकते हैंmouse,xterm-mouse-mode,mouse-wheel-mode, scroll settings वगैरह जोड़ दें तो यह काफ़ी उपयोगी हो जाता है, औरauto-save-defaultको ईश्वर की इच्छा के अनुसारnilपर छोड़ा जाता हैसभी terminal programs ग्राफिकल Emacs के shell-mode buffer में चलाए जाते हैं, और केवल वे दुर्लभ programs जिन्हें full-screen control चाहिए, उनके लिए term-mode इस्तेमाल होता है
यह न सबसे ज़्यादा feature-rich है न सबसे तेज़, लेकिन इसमें दूसरे buffers की तरह move किया जा सकता है और एडिट हो रही सामग्री के साथ इसे सहज रूप से संभाला जा सकता है
अगर remote computer पर ग्राफिकल Emacs नहीं चलाया जा सकता, तो tramp से remote files एडिट करते हैं, या headless Emacs server चलाकर ग्राफिकल emacsclient से कनेक्ट करते हैं
मैंने कभी सोचा ही नहीं था कि लोग यह मान सकते हैं कि मैं Emacs को टर्मिनल में चला रहा हूँ
ग्राफिकल Emacs काफ़ी बेहतर है, लेकिन टर्मिनल में भी लगभग 90% चीज़ें उसी तरह काम करना और दिखना फिर भी शानदार है
अनुभव में यह टर्मिनल जितना हल्का लगता है और VNC जैसा महसूस नहीं होता
इसमें fonts, एक साथ अलग-अलग fonts का उपयोग, menus, mouse, colors, कई frames/windows जैसी खूबियाँ हैं
अगर graphics लोकल पर चलें और remote system तक tramp से पहुँचा जाए, तो practically सिर्फ busybox वाले remote Linux आधारित router की config files भी तमाम सुविधाओं के साथ एडिट की जा सकती हैं
90 के दशक से X11 को बीच-बीच में इस्तेमाल करता आया हूँ, लेकिन fonts आज भी ऐसी चीज़ हैं जिनके लिए खोजते-खोजते कोई command मिल जाए जो काम करे, और फिर उसे दोबारा छेड़ा न जाए
corporate environment में इस्तेमाल होने वाली ज़्यादातर X11 setups की तुलना में, अधिकतर terminal programs की display performance अब भी साफ़ तौर पर तेज़ है
आजकल बस नया Emacs install करें, 24-bit xterm सपोर्ट करने वाला टर्मिनल खोलें, और
emacs -nwचला देंtheme लगाने के बाद अगर ठीक दिखे तो काम ख़त्म, और अगर नहीं, तो
.bashrc,.zshrc,.fishrcवगैरह मेंexport COLORTERM=truecolorजोड़ें, फिर shell को reload करें या सिर्फ वही line चला दें औरemacs -nwदोबारा शुरू करेंयह लेख ऐसा दिखाता है मानो terminfo में गहराई तक जाना पड़ेगा, लेकिन आम तौर पर इसकी ज़रूरत नहीं होती। 10 साल पहले की बात अलग थी, अब नहीं
मैंने जल्दी से MacOS के iTerm और Linux के Alacritty, Kitty, Gnome Terminal में फिर जाँच लिया, और आजकल 24-bit xterm support आम बात है
आज पता चला कि Windows 10 Command Prompt में standard ANSI escape sequences भी काम करते हैं
24-bit colors भी ठीक से काम करते हैं
echo ^[[48;2;255;0;0mHello^[[0mचलाने पर Hello लालRGB(255,0,0)background के साथ दिखता है, और^[[0mरंग को वापस सामान्य कर देता है^[कोCTRL-[से टाइप करना होता है;^और[को अलग-अलग नहीं टाइप करना चाहिए\x1bescape code या\ealias इस्तेमाल कर सकते हैंउदाहरण के लिए
echo -e '\e[48;2;255;0;0mHello\e[0m'जैसा कर सकते हैंलेकिन scripts में
echo -enon-standard है और सामान्यechoभी edge cases में अलग व्यवहार करता है, इसलिए हमेशाprintf '\e[48;2;255;0;0mHello\e[0m\n'इस्तेमाल करना बेहतर हैC:\CONFIG.SYSफ़ाइल मेंDEVICE=C:\DOS\ANSI.SYSजोड़ना न भूलेंvim/neovim की तुलना में Emacs की सबसे अच्छी बात यह है कि इसमें केवल विंडो के अंदर का terminal emulator नहीं, बल्कि first-class GUI support है
मुझे पता है कि gVim और कई अधूरे neovim फ्रंटएंड मौजूद हैं, लेकिन Emacs का default execution mode एक असली GUI है, और यही बात अच्छी लगती है
टर्मिनल भी ठीक है, लेकिन उसमें ऐतिहासिक बोझ और पाबंदियाँ बहुत ज़्यादा हैं, और आज के समय में कुछ बातें बिल्कुल बेमानी लगती हैं
अगर remote server पर Emacs चलाना समस्या है, तो TRAMP और emacsclient मौजूद हैं
जब GUI app दिख रहे text को कॉपी नहीं करने देता और उसे हाथ से फिर से टाइप करना पड़ता है, तो बहुत झुंझलाहट होती है
https://github.com/neovim/neovim/wiki/Related-projects#gui
मुझे modal editing और vim सच में बहुत पसंद हैं, लेकिन terminal editor जो आधा-अधूरा समाधान देता है, उसे सहना मुश्किल था
जब समृद्ध graphical platforms मौजूद हैं, तो उनका इस्तेमाल क्यों न किया जाए?
उदाहरण के लिए vim लगभग सिर्फ files एडिट करने के लिए इस्तेमाल होता है, और
git, linter, formatter, debugger, file tree manipulation जैसे बाहरी tools के लिए वापस shell में चला जाता हैइसलिए मेरा मुख्य application पहले से ही terminal emulator है, और इस workflow में dedicated GUI न होना लगभग मायने नहीं रखता
मुझे तो अच्छा लगेगा अगर मेरा Emacs कुछ ऐसा दिखे: https://imgur.com/a/h0jA1ro
कोई गंभीर बात नहीं, बस मज़ाक है। Cool Retro Term मैं सिर्फ़ प्रेज़ेंटेशन के समय इस्तेमाल करता हूँ
देखा तो पता चला कि मेरे Emacs में 24-बिट रंग डिफ़ॉल्ट रूप से काम करते हैं: https://imgur.com/a/BM5OTxp
बस syntax highlighting थोड़ी खटकती है
Cool Retro Term शानदार है, और मैं भी इसे किसी प्रेज़ेंटेशन में आज़माना चाहूँगा
व्यक्तिगत रूप से, दूसरे retro terminal मुझे इतने अच्छे नहीं लगते
standard को इतनी महँगी कीमत के पीछे बंद कर देना वाकई शर्मनाक है
लोग उसे खरीदने से बचने के लिए इतना घुमावदार रास्ता अपनाने पर मजबूर होते हैं, और ऐसे नतीजे भी सामने आ सकते हैं
अगर वह standard है, तो वह सुलभ होना चाहिए। जब यह सिर्फ़ किताब के रूप में आता था, तब printing cost लेना समझ में आता था, लेकिन एक साधारण PDF के लिए 200 डॉलर लेना यक़ीन करना मुश्किल है
मैंने xterm का 24-बिट रंग patch लिखा था, लेकिन आज ही पता चला कि
xterm-directके साथ ncurses कैसे चलाया जा सकता हैमैं पहले से ही Lisp में बनी अपनी terminal library इस्तेमाल कर रहा था, फिर भी ncurses के साथ एक fallback path रखना अब भी उपयोगी है
Stack Overflow सवाल का जवाब देने वाले Mr. Dickey और यह बात उठाने वाले Chad का धन्यवाद