टर्मिनल के रंग पेचीदा होते हैं
(jvns.ca)- टर्मिनल रंगों की समस्या पसंद-नापसंद से ज़्यादा standards की कमी और implementation के फर्क से जुड़ी है; वही command output भी terminal, theme और app के combination के हिसाब से पढ़ने में मुश्किल हो सकता है
- बेसिक 16 ANSI colors, 256-color और 24-bit hex colors साथ-साथ इस्तेमाल होते हैं, लेकिन कोई color number असल में किस रंग जैसा दिखेगा, यह terminal emulator के हिसाब से बदलता है
- नीला text/काला background, चमकीला पीला/सफेद background, Solarized की grey mapping,
ngrokbackground color जैसे contrast conflicts तब सामने आते हैं जब program की assumptions और user theme मेल नहीं खाते - समाधान कई layers में बंटे हैं, जैसे palette reset,
base16-shell,LS_COLORS,NO_COLOR=true,--color=always,unbuffer, और Vim/Neovim का 24-bit color support - iTerm2, tabby, kitty, Ghostty और Windows Terminal का minimum contrast feature परफेक्ट समाधान नहीं है, लेकिन unreadable output बनने का जोखिम घटाता है
ANSI colors और terminals के बीच फर्क
- Terminal में आम तौर पर काला, लाल, हरा, पीला, नीला, magenta, cyan, सफेद और इनके bright versions से बने 16 ANSI colors होते हैं
- Programs ANSI escape code output करके रंग specify करते हैं
- उदाहरण के लिए
\033[38;5;{num}mformat में foreground color number specify किया जा सकता है
- उदाहरण के लिए
- समस्या यह है कि ANSI color number असल में किस hex color से map होगा, इसके लिए consistent standard नहीं है
- हर terminal emulator खुद रंग चुनता है
- Wikipedia की ANSI escape code color table में भी implementations के बीच काफी फर्क दिखता है
- इसी फर्क की वजह से
lsdirectories के लिए जो नीला रंग इस्तेमाल करता है, वह काले background पर ठीक से नहीं दिख सकता - bright yellow और white background का combination भी लगभग पढ़ना मुश्किल होता है, और bright green जैसे दूसरे रंगों में भी ऐसी समस्या आ सकती है
Color palette reset करने का तरीका
- अगर default ANSI colors पसंद नहीं हैं या contrast की समस्या है, तो palette reset से इसे संभाला जा सकता है
-
Terminal emulator में setting
- ज्यादातर modern terminal emulators रंगों को reset करने का feature देते हैं
- कुछ में built-in themes भी मिलती हैं
- जितना popular terminal emulator होगा, उतनी ज्यादा selectable themes मिल सकती हैं
-
Shell script से setting
- ANSI escape code output करके terminal emulator की color palette बदली जा सकती है
- base16-shell की Solarized Light script कई terminals के escape code conventions इस्तेमाल करती है
- Script
TERMenvironment variable के हिसाब से सही escape code style चुनने की कोशिश करती है - Shell script वाला तरीका terminal emulator बदलने पर भी वही color settings बनाए रखना आसान बनाता है
- हालांकि हर terminal emulator इस तरीके से palette बदलना support नहीं करता, और support करने पर भी result थोड़ा-थोड़ा अलग हो सकता है
256 colors, 24-bit colors और tool-specific themes
- कई terminals color specify करने के 3 तरीके support करते हैं
- 16 ANSI colors
- extended 256 colors
#ffea03जैसे 24-bit hex colors
fdoutput में^[[38;5;48mजैसा escape code इस्तेमाल करके foreground color 48 specify करता है- यह रंग सामान्य terminal color table में न दिखने वाले lime color जैसा लग सकता है
- इस्तेमाल हो रही color table के साथ इसका contrast खराब हो सकता है
batभी इसी तरह colors इस्तेमाल करता है, लेकिन उसका default output अलग-अलग terminal themes में काम करने के लिए बनाया हुआ लगता हैfd,bat,deltaजैसे कुछ नए terminal tools arbitrary custom themes support करते हैं- Default theme terminal background से clash कर सकती है
- बदले में, केवल 16 ANSI colors चुनने की तुलना में tool output की theme पर ज्यादा fine-grained control मिलता है
bat --theme ansiइस्तेमाल करने परbatसामान्य terminal color table में configured ANSI colors इस्तेमाल करता है
Solarized और base16 में होने वाले conflicts
- Solarized Light में implementation के हिसाब से bright color mapping अलग दिख सकती है
- iTerm की default Solarized Light theme मूल Solarized design की तरह colors 9~14, यानी “bright blue”, “bright red” आदि को grey shades पर map करती है
- अगर
lsdirectories और executables के लिए bright colors इस्तेमाल करे, तो वे grey दिख सकते हैं
- अगर
- base16 Solarized Light एक ऐसे variant की तरह इस्तेमाल हो सकता है जो bright colors को grey नहीं, बल्कि असली colors ही रखता है
- यह फर्क संभवतः इसलिए है क्योंकि मूल Solarized को इस तरह design किया गया था कि Vim Solarized color scheme grey इस्तेमाल कर सके
base16-shell,base16-vimको extra colors देने के लिए colors 16~21 set करता है- जब
ngrokbackground को color 16 “black” पर set करने की कोशिश करता है, और वही color bright orange में remap हुआ हो, तो बहुत अजीब background बन जाता है - जब program ANSI background color specify करता है और user उस color को किसी दूसरे अर्थ में remap कर देता है, तो ऐसे conflicts आसानी से पैदा होते हैं
- जब
Minimum contrast से contrast problems कम करना
- कुछ terminals minimum contrast feature से foreground और background colors का contrast पर्याप्त न होने पर colors automatically adjust करते हैं
- iTerm2, tabby, kitty का text_fg_override_threshold, Ghostty और Windows Terminal यह feature देते हैं
- iTerm में minimum contrast value 40 set करने पर,
ngrokbackground color conflict जैसा पढ़ने में मुश्किल output भी ज्यादा readable हो जाता है - जब color settings गलत हों या program और theme clash कर रहे हों, minimum contrast accidental readability issues कम करने वाला practical safety net है
TERM, pipes और colors disable होना
- अगर SSH से connected system local
TERMenvironment variable value support नहीं करता, तो colors सही से काम नहीं कर सकते - System
terminfodatabase इस्तेमाल करता है, और अगरTERMvalue उस database में नहीं है, तो terminal के लिए सही color output पता करना मुश्किल हो जाता है - कोई reproducible environment नहीं था, लेकिन Stack Overflow answer
sshकी जगहTERM=xterm sshजैसे format का सुझाव देता है - Commands को pipe से जोड़ने पर कभी-कभी colors disable हो जाते हैं
fd | lesscolor के बिना output दे सकता है- आम तौर पर
grepजैसे tools को भेजते समय escape code के बिना plain text मिलना उपयोगी होता है
- Colors बनाए रखना चाहते हैं तो
unbuffer fd | less -rइस्तेमाल कर सकते हैंunbuffertty खोलता है ताकि command को लगे कि वह TTY पर लिख रहा है- यह pipe में लिखते समय program output buffering की समस्या भी हल करता है
- कुछ commands, जैसे
fd,--color=alwaysflag से हमेशा color output दे सकते हैं
ls colors बंद करना या बदलना
- कुछ users
lscolor output नहीं चाहते- नीला रंग काले background पर पढ़ना मुश्किल हो सकता है, या
- वे terminal color table adjust नहीं करना चाहते, या
- colors खुद उपयोगी नहीं लग सकते
- Options कई हैं
ls --color=neverसे colors बंद किए जा सकते हैंLS_COLORSenvironment variable सेlsद्वारा इस्तेमाल होने वाले colors customize किए जा सकते हैं- कुछ programs
NO_COLOR=truesupport करते हैं, और no-color.org पर उनकी list है
- उदाहरण के लिए
LS_COLORS="fi=0:di=0:ln=0:pi=0:so=0:bd=0:cd=0:or=0:ex=0" lsजैसा set करने पर कई file types की color style 0 पर set की जा सकती है
Vim और Neovim में बदलाव
- Vim color settings में पहले terminal color table और Vim color scheme को match करना पड़ता था, इसलिए काफी समस्याएं होती थीं
- Terminal के अंदर Vim color scheme set करने के मुख्य रूप से 2 तरीके हैं
- Vim color classes को ANSI color numbers पर map करना
- Color scheme सीधे
#faea99जैसे 24-bit hex colors इस्तेमाल करे
- 20 साल पहले 24-bit hex colors support करने वाले terminals आम नहीं थे, और Vim भी terminal में 24-bit colors का इस्तेमाल support नहीं करता था
- Vim ने 2016 में 24-bit color support जोड़ा
- Neovim 0.10 मई 2024 में release हुआ, और 24-bit color support करने वाले terminals में
termguicolorsdefault रूप से on है - अगर 2024 में आप ऐसा terminal इस्तेमाल करने की योजना नहीं रखते जो 24-bit colors support नहीं करता, तो terminal color table और Vim color scheme को जरूर sync रखने का बोझ खत्म हो जाता है
- इस बदलाव से
base16-shellको Vim integration के लिए colors 16~21 को special तरीके से set करने की जरूरत कम हो जाती है- वह हिस्सा हटाने पर
ngrokके orange background जैसे conflicts से बचा जा सकता है
- वह हिस्सा हटाने पर
base16 usage experience और limitations
- base16-shell और base16-vim को साथ इस्तेमाल करने पर terminal और Vim colors match करना आसान हो जाता है
- fish setting में कुछ lines जोड़कर और
.vimrcमें कुछ lines डालकर setup किया जा सकता है - base16 हर किसी के लिए सही तरीका नहीं है
- Built-in themes की संख्या सीमित है और पसंद की theme नहीं मिल सकती
- Solarized base16 theme bright ANSI colors को normal colors जैसा ही set करती है, और जिन use cases में bright colors अलग चाहिए, वहां समस्या हो सकती है
base16-vimको ज्यादा colors देने के लिए colors 16~21 set करने का तरीका ऐसे environments में जरूरी नहीं हो सकता जहां सिर्फ 24-bit color support वाले terminals इस्तेमाल होते हैं- Colors 16~21 settings Linux framebuffer terminal जैसे 256 colors support नहीं करने वाले terminals में समस्या पैदा कर सकती हैं
- base16 का community fork tinted-theming है
Color-scheme tools और popular themes
- rootloops.sh color schemes generate करने का tool है
- साथ में पढ़ने लायक article “let’s create a terminal color scheme” है
- Mastodon responses में mentioned popular color schemes ये हैं
अब भी बची हुई समस्याएं
tmux, SSH और Vim के combination जैसे points पर, जहां कई programs मिलते हैं, extra color problems आ सकती हैं- अच्छी color scheme चुनना भी अपने-आप में मुश्किल है
- color vision deficiency वाले users के लिए सही color scheme ढूंढना मुश्किल हो सकता है
- अगर background color cursor या selection area color के बहुत करीब हो, तो position ढूंढना मुश्किल हो जाता है
- हर program में सही काम करने वाले colors ढूंढना मुश्किल है, और
ngrokcase की तरह conflicts हो सकते हैं
- Nethack या Midnight Commander जैसे programs, जो default ANSI colors पर आधारित किसी खास “classic” look की उम्मीद करते हैं, Solarized जैसी themes में अजनबी लग सकते हैं
- एक तरीका यह है कि program चलाने से ठीक पहले ANSI palette बदल दी जाए
- उदाहरण के लिए Nethack चलाने से पहले yellow को ज्यादा bright yellow में remap किया जा सकता है
- जो users चाहते हैं कि colors बस ठीक से काम करें, उनके लिए इतनी manual configuration बोझिल है; इसलिए sensible defaults और minimum contrast जैसे features महत्वपूर्ण हैं
1 टिप्पणियां
Hacker News की राय
सिस्टम के लिए light color theme ठीक से बनाने की कोशिश में मुझे ये और इससे भी ज़्यादा समस्याएँ झेलनी पड़ीं, और खास तौर पर दो बातें दिलचस्प लगीं
पीछे मुड़कर देखें तो यह स्वाभाविक है, लेकिन यह देखकर हैरानी हुई कि light theme में स्क्रीन बदलने पर dark theme की तुलना में फर्क कहीं ज़्यादा सूक्ष्म तरीके से दिखता है। Hardware और software settings रंगों के output में अंतर तो पैदा करते हैं, लेकिन उजले क्षेत्रों में बदलाव को हम अंधेरे क्षेत्रों के बदलाव की तुलना में कहीं ज़्यादा महसूस करते हैं
कई बार Linux या BSD console जैसे ऐसे माहौल तक उतरना पड़ता है जहाँ fonts और fancy color support सीमित होता है। तब
fdयाexa/lsd/whateverअसुविधाजनक या लगभग बेकार हो सकते हैं, खासकर अगर आपने बाद वाले कोlsसे map कर रखा हो तो झंझट और बढ़ जाता है। लंबी माथापच्ची के बाद मैंने X के बिना भी ठीक-ठाक terminal features इस्तेमाल करने के लिए fbterm सेट किया, लेकिन fbterm की अपनी अलग समस्याएँ हैं। Vim color scheme सेट करते समय कम-feature वाले console के लिए fallback theme तैयार रखनी पड़ती है, या Vim commands बिना देखे टाइप करने की काफी practice करनी पड़ती है :DEdit: serious काम के लिए नहीं, लेकिन X के बिना क्या किया जा सकता है यह दिखाने वाली styled fbterm screen: https://i.imgur.com/RbDRgtD.png
इसलिए सही exposure और contrast मिलाते समय काफी समय highlights को “बिलकुल सही” दिखाने में लगाया जाता है। मैं digital printing नहीं करता, लेकिन लगता है वही principle वहाँ भी लागू होगा
अफसोस की बात है कि अक्सर JavaScript में लिखे गए “modern” command-line tool frameworks इसे नज़रअंदाज़ करते हैं
https://www.gnu.org/software/gettext/manual/html_node/The-TE...
Data points पर उसी रंग का हल्का “glow” effect देने की setting भी है, जिससे वे चमकते हुए dots जैसे दिखते हैं। Color saturation के नजरिए से, यानी पूरे spectrum के signal-to-noise ratio के नजरिए से, black background बेहतर होना समझ में आता है
करीब 10 अलग-अलग रंग लगभग बिना समस्या के इस्तेमाल किए जा सकते हैं। साथ ही yellow का red और green के बीच होना, orange का red और yellow के बीच होना जैसी बातों से order/distance information देने का फायदा भी है, जिससे segment करना और यह समझना आसान हो जाता है कि दो colors कितने करीब हैं
सच कहें तो मुझे यह इतना मुश्किल नहीं लगता
चरण 1: ज़्यादातर terminal emulators की default color palette खराब होती है, इसलिए उसे बदल देना चाहिए। निजी तौर पर मुझे Solarized पसंद है, खासकर dark theme, लेकिन light theme भी ठीक है। Solarized न भी हो, तो भी ऐसी बहुत-सी themes हैं जिनमें default background पर कोई भी रंग पढ़ा जा सकता है
चरण 2: ऐसे command-line tools से बचना चाहिए जो default रूप से 8-bit या 24-bit color escape sequences इस्तेमाल करते हैं। इस पर विवाद हो सकता है, लेकिन निजी तौर पर मैं इसे user-hostile मानता हूं। मैंने पहले ही अपनी readability जरूरतों के हिसाब से सबसे अच्छी terminal color palette चुन रखी है; ऐसे में कोई developer खुद को नकली designer समझकर उसे override करे, इससे मदद नहीं मिलती। tool के अंदर theme चालू करने का option दिया जा सकता है, लेकिन यह default नहीं, बल्कि optional होना चाहिए
अपनी ज़िंदगी का बड़ा हिस्सा terminal में बिताने वाले व्यक्ति के तौर पर, सिर्फ इन दो नियमों का पालन करने से लगभग बिना setup झंझट के एक consistent और पढ़ने में आसान terminal environment बनाया जा सकता है। असली समस्या यह है कि हम developers द्वारा 8-bit और 24-bit color escape codes इस्तेमाल करने को बहुत ज़्यादा स्वीकार कर लेते हैं
कई सालों में मैं इस नतीजे पर पहुंचा हूं कि नए features को users के सामने साफ़-साफ़ रखना चाहिए और अच्छे defaults को मजबूती से push करना चाहिए। वरना features लगभग इस्तेमाल ही नहीं होते
8-bit और 24-bit colors पहले से ही optional रूप से इस्तेमाल होने वाला feature हैं और configurable भी हैं। कोई terminal program ठीक से काम करता है, तो TERM और COLORTERM environment variables तय करते हैं कि ऐसे colors इस्तेमाल करने हैं या नहीं
कई applications उम्मीद करती हैं कि “bright black” text background पर दिखेगा। इसके कई उदाहरण यहां हैं: https://github.com/altercation/solarized/issues/220
लगभग हर दूसरी color palette “bright black” को black background पर पढ़े जा सकने वाले gray के रूप में दिखाती है
उदाहरण के लिए pamix background को black सेट करता है, और tmux status line या ngrok भी कुछ ऐसा ही करते हैं। फिर उसे संभालने के लिए आप rabbit hole में उतर जाते हैं
दोनों बातें संकेत देती हैं कि समाधान terminal में होना चाहिए। terminal program के पास शुरू से reasonable default colors होने चाहिए; blue पहचानने लायक blue होना चाहिए और common color vision deficiencies का भी ध्यान रखना चाहिए। उदाहरण के लिए pure red को black background पर रखना पढ़ने में मुश्किल होता है, इसलिए सिर्फ
ff0000न इस्तेमाल करके उसमें थोड़ा-सा blend करना बेहतर हैजब terminal के पास reasonable defaults होंगे, तो command-line programs standard 16 colors इस्तेमाल कर सकते हैं। यहां 24-bit color इस्तेमाल करने की कोशिश का मतलब लगभग यह होता है कि “मैंने terminal side से sanity देने की उम्मीद छोड़ दी है” या “मुझे सबसे बेहतर पता है”; अंत में user को N programs को अलग-अलग configure करना पड़ता है। मेरी नज़र में सबसे अच्छा तरीका यही है कि command-line apps के अंदर themes define न की जाएं
websites और fonts को भी मैं इसी तरह देखता हूं। content HTML के रूप में दिया जाना चाहिए ताकि user उसे अपनी पसंद के तरीके से देख सके, और page layout को magazine layout की तरह fixed न रखकर flow होने देना चाहिए
desktop software में भी कुछ ऐसा ही है। Wayland compositor को window positions याद रखनी चाहिए। हर X program का अपनी window position save और restore करना मूर्खतापूर्ण था। Wayland कहता है कि environment की जानकारी होना security issue है, और मैं इससे सहमत हूं; लेकिन फिर वह memory desktop environment का काम बनती है। इससे हर app से वह code हटाया भी जा सकता है
“software stack में इसे कहां handle किया जाना चाहिए?” यह सवाल कई क्षेत्रों में बार-बार आता है। इसे कहां रखना है, चुनते समय पहले यह जवाब देना चाहिए कि लक्ष्य क्या है; मेरा जवाब हमेशा simplicity और maintainability की तरफ झुकता है
Julia का लेख भी इस idea का ज़िक्र करता है, लेकिन ठोस मुश्किलों तक नहीं जाता। इससे जुड़े तौर पर यह भी जानना चाहूंगा कि terminal color palette सिर्फ default 16 colors को संभालती है या RGB और grayscale ranges तक भी छेड़ती है। 8-bit और 16-bit colors को भी readability requirements के हिसाब से adjust किया जा सकता होगा
अगर आप colors चुनने की भूमिका में हैं, तो नए APCA algorithm (Advanced Perception of Colour) से colors check करना अच्छा रहेगा
APCA आगे चलकर WCAG 3.0 में मौजूदा x:y contrast तरीके की जगह लेने वाला है, हालांकि इसमें अभी कई साल और लग सकते हैं। बताया जाता है कि यह font size, weight, foreground/background, यहां तक कि ambient lighting और environment, और intended use तक को ध्यान में रखता है
अगर terminal emulator device के light sensor का इस्तेमाल करके environmental factors के हिसाब से contrast optimize कर सके, तो यह काफी अच्छा लगेगा
कुछ पूर्ण पागल लोग ऐसे भी हैं जो रंगों को पूरी तरह बंद करना चाहते हैं[0]. खुद आज़माने का मन भी करता है, लेकिन मुझे सुंदर रंग भी पसंद हैं
[0] https://no-color.org/
:syntax offही मेरी इकलौती Vim सेटिंग है. क्योंकि terminal color sets को computer programmers, electrical engineers, और ऐसे लोगों ने design किया है जिन्हें यह नहीं पता कि रंगों में अहम चीज़ रंग खुद नहीं बल्कि brightness होती हैमुझे जिज्ञासा है कि terminal में रंग नहीं चाहने वाले लोगों और browser में strong ad blocker इस्तेमाल करने या reading mode ज़्यादा इस्तेमाल करने वाले लोगों के बीच कोई correlation है या नहीं
output को pipe करते समय रंग बिना किसी फ़ायदे के सिर्फ़ liability बन जाते हैं. मुख्य बात choice के ज़्यादा करीब है
Linux और Windows के बीच आते-जाते यह और खराब हो जाता है. कई tools में रंगों का default इस्तेमाल लगभग unusable होता है या सचमुच इस्तेमाल को असंभव बना देता है
कुछ tools
--color=neveroption देते हैं, और काफ़ी tools NO_COLOR का सम्मान करते हैं. अफ़सोस, सभी नहीं; और जो tools ऐसा करते भी हैं, वे कभी-कभी मान लेते हैं कि वह mode सिर्फ़ pipeline या programming interface के लिए इस्तेमाल होगा. इसलिए तरह-तरह के दुर्भाग्यपूर्ण व्यवहार दिखते हैंइसमें meaningful color temperature वाला एक consistent palette concept है, और बहुत ज़्यादा नीली रोशनी देखते-देखते आँखों की थकान कम करने के लिए यह गर्म रंगों की तरफ़ झुका हुआ है. alacritty color palette भी साथ देता है
लंबे समय से terminal में light theme इस्तेमाल करना चाहता था, लेकिन इतने सारे programs dark terminal background के लिए optimized custom non-ANSI colors इस्तेमाल करते हैं कि हर बार हार मान ली
कुछ programs में colors configure किए जा सकते हैं, लेकिन हर program को अलग-अलग configure करना बहुत झंझट लगा. इसलिए अब मैं dark terminal background ही इस्तेमाल करता हूँ, लेकिन एक ANSI theme खुद चुनकर रखी है जिसमें सभी colors मेरे मानक के हिसाब से पर्याप्त contrast ratio रखते हैं और APCA/WCAG 3 contrast check भी pass करते हैं. संतुष्ट हूँ :)
OSC 11 control sequence से program background color जान सकता है, लेकिन बहुत कम programs इसकी परवाह करते हैं. आमतौर पर किसी को yellow warning message अच्छा दिखता है तो बात वहीं खत्म हो जाती है
यह एक और समस्या की ओर ले जाता है. कुछ popular terminals हैं जो xterm compatible नहीं हैं, फिर भी default रूप से
TERM=xterm256-colorset करते हैंedit: अभी-अभी
xtermcontrolमिला; scripts में background check को abstract कर सकता है और सभी major package managers में मौजूद हैआजकल हार मानकर ज़्यादातर apps को manually ANSI colors इस्तेमाल करने के लिए set करता हूँ. जैसे fzf में command-line switch है. Vim और Emacs को ही non-ANSI apps रहने देता हूँ, और उन्हें बाकी terminal में इस्तेमाल होने वाली palette के हिसाब से configure करता हूँ. चाहें तो vim-dim जैसी चीज़ से एक कदम और आगे जा सकते हैं
Emacs में एक कम खोजा जाने वाला
frame-background-mode[0] है, जो असल मेंlightयाdarkमें से एक होता हैजब सोचते हैं कि Emacs ने किसी item के लिए अजीब रंग क्यों चुना, तो अक्सर वजह frame-background-mode का गलत होना होती है
[0]https://doc.endlessparentheses.com/Var/frame-background-mode...
सफ़ेद text वाले dark background terminal में
export COLORFGBG='15;0'काले text वाले light background terminal में
export COLORFGBG='0;15'लगभग 10 साल से हल्का modified FlatUI color palette इस्तेमाल कर रहा हूँ, और वास्तव में समस्या बनी हो ऐसे हालात बहुत कम आए
png file: https://drive.google.com/file/d/1mkMESeGf7MNdKa-rPDx7Yf9BDit...
imgur link: https://imgur.com/a/flatui-7mqVZAY
based on: https://flatuicolors.com/palette/defo
मैं भी अपनी theme लगभग 10 साल से इस्तेमाल कर रहा हूँ. iTerm, vim, Emacs, vscode आदि में अच्छी तरह काम करती है
Apple Terminal को लंबे समय से इस्तेमाल करता आया हूं, और पहले “Terminal Fructose” नाम का एक अच्छा color scheme collection था, जिससे काम के हिसाब से अलग-अलग background color इस्तेमाल करता था। Apple ने भी किसी समय उसे theme के रूप में built-in कर दिया था
लेकिन Apple ने Terminal support को लगभग छोड़ दिया है; यह 256 रंगों से ज़्यादा support नहीं करता और इसमें आधुनिक features भी कम हैं। Neovim+LazyVim configuration के साथ भी ठीक से फिट नहीं बैठता
बेहतर terminal ढूंढने के लिए iTerm2, Kitty, Alacritty, Wezterm के बीच घूमता रहा, लेकिन सभी अधिक आधुनिक होते हुए भी, अलग-अलग background color/theme वाली windows जल्दी खोलने का basic “New Window with Profile ...” option नहीं दिखा। कम से कम थोड़ी मशक्कत के बिना तो नहीं
अब Wezterm पर settle कर लिया है, मुख्य वजह यह है कि यह Windows पर भी चलता है और
wezterm.luaconfiguration share की जा सकती है। वैसे Windows Terminal भी सच में काफी अच्छा है। फिर भी छोटे-छोटे कामों के लिए, जैसे calculations के लिएpython3को REPL की तरह इस्तेमाल करना या hexadecimal/binary test करना, अब भी अक्सर Apple Terminal launch कर लेता हूंiTerm2 के कुछ features याद आते हैं, लेकिन उनमें से ज़्यादातर mouse-related हैं। बाकी चीज़ें कुछ शामों में अपनी पसंद के हिसाब से configure कर लीं, और जब
cmd-nको current directory की बजाय default directory में नई window खोलने के लिए set कर दिया, तब से इसे संतोष से इस्तेमाल कर रहा हूंlaunch_menu[1] या command palette में item जोड़ने वालेaugment-command-palette[2] में कुछ hack करके डाला जा सकता है[1] https://wezfurlong.org/wezterm/config/lua/config/launch_menu...
[2] https://wezfurlong.org/wezterm/config/lua/window-events/augm...
सही है, थोड़ी मशक्कत चाहिए। लेकिन किसी बेहद specific feature को ठीक अपनी पसंद के तरीके से program करना ही WezTerm जैसा experience का peak है
सिर्फ terminal में ही नहीं, neon signs या LED signboards में भी नीला रंग रात में आंखों पर सबसे ज़्यादा भारी पड़ता है
दूर से देखने पर वह हमेशा धुंधला और out of focus लगता है। जब बड़ी कंपनियों को नीली रोशनी वाले विशाल signboards लगाते देखता हूं, तो हैरानी होती है कि लोग यह समझे बिना इतना पैसा खर्च कर देते हैं कि उन्हें पढ़ा ही नहीं जा सकता
laptop पर daylight cycle के हिसाब से light/dark mode auto-switch कर रखा है, और bright background पर dark text mode में बदलते समय टूट जाने वाले color output applications की संख्या हैरान करने वाली है
अगर command-line tool बनाते समय रंगों का इस्तेमाल करना ही है, तो ANSI 16 colors तक ही रहें, या end user को color palette बदलने दें