tmux, TERM और 256 कलर सपोर्ट करते हैं


48

परिचय

मेरा प्रश्न यह समझने की आवश्यकता से उत्पन्न होता है कि मेरे पास अब (कई परीक्षणों के बाद) टर्मिनल और tmux 256 रंगों का समर्थन करने और tput colorsमुझे बताने के कारण उनमें से केवल 8 हैं।


पृष्ठभूमि

हमें शुरू से करना चाहिए।

मैं एक उबंटू बॉक्स, गुआक , tmux , विम का उपयोग कर रहा हूं और मुझे थीम सोलराइज्ड पसंद है । वे बहुत भयानक लग रहे थे, इसलिए मैंने 256 रंगों के समर्थन को सक्षम करने और थोड़ा सा खेलने का फैसला किया।

आइए देखें कि मेरे टर्मिनल के लिए क्या होता है । tput colorsकहते हैं कि 8 रंग हैं। मैंने व्यक्तिगत रूप से उन्हें बैंगनी, बाईं ओर और निश्चित रूप से दाईं ओर नीले रंग के 2 अलग-अलग रंगों में सेट किया है। $TERMकहता है xterm। (रंगी होनी lsमैं eval इस मेरे में .bashrc।)

यहाँ छवि विवरण दर्ज करें

विम भी ठीक दिखता है, इस तथ्य के बावजूद कि मैं इसे 256ध्वज के साथ एक ऐसे वातावरण में कहता हूं जहां 256 रंगों का समर्थन नहीं किया जाता है।

set t_Co=256
let g:solarized_termcolors=256
colorscheme solarized

कम रंग की जगह के बारे में शिकायत करने वाला एकमात्र लड़का tmux है । कॉलिंग tmux"गलत" अपेक्षित परिणाम प्रदान करता है।

यहाँ छवि विवरण दर्ज करें

लेकिन झंडे के tmuxसाथ कॉल करना -2सब कुछ ठीक काम करता है, जादुई रूप से

यहाँ छवि विवरण दर्ज करें

अब केवल एक चीज जो मुझे समझ में आ रही है, वह -2है export TERM=screen-256color( स्रोत )।

गुएक टर्मिनल के अनुरूप व्यवहार करते हैं और दोनों xtermप्रश्न का उत्तर देते हैं echo $TERM


सवाल

असल में, क्या किसी को भी समझ में आता है कि सब कुछ काम क्यों नहीं करना चाहिए?

  • क्या मैं दुखी हूं कि मुझे शिकायत है कि चीजें काम क्यों करती हैं? शायद।
  • क्या कोई बेहतर कारण है? ज़रूर: मैं अपने कार्यालय में अन्य उबंटू बक्से की उपस्थिति को ठीक करना चाहता हूं, और मैं यह समझना चाहता हूं कि चीजें क्यों काम करती हैं या काम नहीं करती हैं।

अतिरिक्त प्रयोग

मेरे पर इस स्क्रिप्ट (थोड़ा संशोधित) को चलाने xtermसे निम्नलिखित परिणाम मिलता है: 256 रंग, लेकिन केवल 16 सही ढंग से प्रदर्शित किए जाते हैं।

यहाँ छवि विवरण दर्ज करें

फिर, टर्मिनल की प्रोफाइल को बदलना, ये 16 रंग भी बदलते हैं।

यहाँ छवि विवरण दर्ज करें

अधिक परीक्षण निम्नलिखित हैं।

बाएं से दाएं, ऊपर से नीचे, हमारे पास सोलराइज्ड कलर थीम है, dircolor ansi-darkऔर 256darkफिर डिफॉल्ट ( टैंगो ) कलर स्कीम, dircolor ansi-darkऔर 256dark

यहाँ छवि विवरण दर्ज करें

अवलोकन : सिद्धांत रूप में dircolor ansi-darkपर Solarized रंग योजना मैच बारीकी से करना चाहिए था dircolor 256dark। यह विशिष्ट सूचीबद्ध फ़ाइलों के लिए स्पष्ट रूप से नहीं हो रहा है। इसके बजाय, ऐसा तब होता है जब वर्किंग डायरेक्टरी में फोल्डर , टेक्स्ट फाइल्स और सिम्बोलिक लिंक होते हैंनिष्कर्ष : 256darkरंगों को एन्कोडिंग करते समय उतना ध्यान नहीं दिया गया ।


प्रारंभिक निष्कर्ष

xterm256 रंगों का समर्थन करता है, इसके बावजूद कि क्या tput colorsकहता है। कार्यक्रम ansiपैलेट को संदर्भित कर सकते हैं (उपयोगकर्ता द्वारा अनुकूलन) या उनके रंगों को परिभाषित कर सकते हैं, कुल 256 रंगों से चुन सकते हैं।


1
इस जवाब और इसके नीचे की टिप्पणियों को पढ़ें । क्या यह आपके प्रश्न का उत्तर देता है? रंगों की वास्तविक संख्या का समर्थन प्राप्त करने के लिए इस स्क्रिप्ट पर भी एक नज़र डालें ।
terdon

हम ... मैं अभी भी थोड़ा भ्रमित हूं ... लेकिन, मुझे लगता है कि मैं कम से कम समझ रहा हूं कि tput colorsयह एक अविश्वसनीय परीक्षण है। क्या आप मेरे प्रारंभिक निष्कर्षों की जांच कर सकते हैं ?
मार्को 9'14

2
गीलो के उत्तर के बारे में मेरा पढ़ना यह है कि tput colorsकेवल एक मान लौटाया जा सकता है और ऐसे टर्मिनलों में जो 2,8,16,88 या 256 रंगों में से किसी का भी समर्थन करते हैं, केवल पहला मान (आपके मामले में 8) लौटाया जाता है। सही मूल्य प्राप्त करने के लिए मेरी पिछली टिप्पणी से स्क्रिप्ट का उपयोग करें। वह क्या लौटाता है?
terdon

ऊपर मेरे अतिरिक्त प्रयोगों की जाँच करें :)
Atcold

आह, सॉरी, मेरी बुर।
terdon

जवाबों:


33

Tmux FAQ में 256-रंग समर्थन पर कुछ जानकारी है ।

उन रंगों की संख्या का पता लगाना जो टर्मिनल का समर्थन करता है दुर्भाग्य से ऐतिहासिक कारणों से सीधा नहीं है। यह देखने के लिए कि मेरे टर्मिनल एमुलेटर कितने रंगों का स्पष्टीकरण के लिए समर्थन करता है। इस का मतलब है कि

  • tmux मज़बूती से यह निर्धारित नहीं कर सकता है कि टर्मिनल 8 से अधिक रंगों का समर्थन करता है;
  • tmux भरोसेमंद रूप से उस एप्लिकेशन से संवाद नहीं कर सकता है जो 8 से अधिक रंगों का समर्थन करता है।

जब आप tmux में होते हैं, तो जिस टर्मिनल के साथ आप संपर्क कर रहे हैं, वह tmux है। यह xterm के सभी नियंत्रण दृश्यों का समर्थन नहीं करता है। विशेष रूप से, यह OSC 4 ; …रंग मानों को क्वेरी या सेट करने के लिए नियंत्रण अनुक्रम का समर्थन नहीं करता है । आपको यह उपयोग करने की आवश्यकता है, जबकि सीधे xterm में, tmux के बाहर।

यदि आप चलाते हैं tmux -2, तो tmux 256-रंग के समर्थन से शुरू होता है, भले ही यह नहीं लगता है कि आपका टर्मिनल 256 रंगों (जो बहुत आम है) का समर्थन करता है।

डिफ़ॉल्ट रूप से, tmux स्वयं को screen256-रंग समर्थन के बिना विज्ञापित करता है। आप का मूल्य बदल सकते TERMमें .tmux.conf256 रंग समर्थन से संकेत मिलता है:

set -g default-terminal "screen-256color"

आप उबंटू पर उपयोग TERM=xterm-256colorया कर सकते हैं TERM=screen-256color। यदि आप दूरस्थ मशीन में लॉग इन करते हैं तो ये मूल्य परेशानी का कारण बनेंगे, जिसमें इन नामों के लिए एक टर्मकैप / टर्मोइफ़ प्रविष्टि नहीं है। आप दूरस्थ मशीन पर अपने घर निर्देशिका में प्रविष्टियों की प्रतिलिपि बना सकते हैं; यह सबसे आधुनिक टर्मफोर्स कार्यान्वयन के साथ काम करता है।

# From the Ubuntu machine to a machine that doesn't have *-256color terminfo entries
ssh somewhere.example.com mkdir -p .terminfo/s .terminfo/x
scp -p /lib/terminfo/s/screen-256color somewhere.example.com:.terminfo/s/
scp -p /lib/terminfo/x/xterm-256color somewhere.example.com:.terminfo/x/

मैं स्पष्टीकरण की सराहना करता हूं, लेकिन मुझे यकीन नहीं है कि यह मेरे सवाल को लक्षित करता है .. खैर, मैं मानता हूं कि मेरा प्रश्न काफी व्यापक था, लेकिन मैं विशेष रूप से tmux पर ध्यान केंद्रित नहीं कर रहा था । असल में, tmux एकमात्र लड़का था जो उम्मीद के मुताबिक व्यवहार कर रहा था। यह बहुत अधिक रहस्यमय था कि कैसे xtermमुझे 256 रंगों को दिखाने में सक्षम था, भले ही tput colorsयह कह रहा था 8. मुझे लगता है कि इस विशिष्ट प्रश्न का उत्तर @terdon ने अपनी टिप्पणी में ही प्रश्न को संबोधित किया है।
Atcold

@Atcold यह एक लंबा सवाल है, लेकिन जहां तक ​​मैं बता सकता हूं कि मैंने इसका जवाब दिया है। गैर-टमक्स-संबंधित भागों को उस उत्तर द्वारा कवर किया जाता है जो टेर्डन और मैं (और मैंने लिखा है) से जुड़ा हुआ है। यदि आपका प्रश्न tmux पहलू के लिए नहीं होता है, तो यह उसी का एक डुप्लिकेट होता। आप एक उत्तर से और क्या उम्मीद कर रहे थे?
गिलेस एसओ- बुराई को रोकना '

1
@ गिल्स , मैं मीन साउंड नहीं करना चाहता था। मैं @terdon को "स्वीकृत उत्तर" चीज़ को मान्यता देने की कोशिश कर रहा था , भले ही वह किसी अन्य प्रश्न में आपके उत्तर को संदर्भित करता हो। इसके बावजूद, tmuxset -g default_terminal "screen-256color" में 256 रंगों को सक्षम करने के लिए कमांड पर्याप्त नहीं है । आपको ( संदर्भ ) की आवश्यकता है । alias tmux='export TERM=screen-256color; /usr/bin/tmux'
११'१४ बजे

@Accold नहीं, उपनाम की आवश्यकता नहीं है (मैंने परीक्षण किया)। इसके अलावा इस उपनाम से कोई मतलब नहीं होगा: यह tmux का दिखावा करता है कि यह स्क्रीन या tmux के अंदर चल रहा है। हालाँकि, आपको tmux -2मेरे पिछले पैराग्राफ के अनुसार चलने की ज़रूरत है , अगर tmux को नहीं लगता कि आपका वर्तमान टर्मिनल 256 रंगों का समर्थन करता है, तो इसका alias tmux='tmux -2'मतलब होगा।
गिल्स एसओ- बुराई को रोकें '

2
@Atcold वह U & L उत्तर है TERM=xterm-256color tmux, जो समझदार है, इसके विपरीत TERM=screen-256color tmuxtmux -2श्रेष्ठ है क्योंकि यह screen-256colorस्थानीय टर्मोफ़ डेटाबेस में नहीं है तो भी काम करता है।
गाइल्स का SO- बुराई से रोकना '

20

मैं इस बात से प्रभावित हूँ कि कैसे बड़े पैमाने पर प्रारूपित हुए और उत्तर (और प्रश्न!) विस्तृत हैं। जबकि वे आपके द्वारा उल्लिखित टूल के बारे में मूल्यवान जानकारी और समाधान प्रदान करते हैं, वे इस बारे में बहुत कम जानकारी देते हैं कि बिल्ली क्या चल रही है , और, सबसे महत्वपूर्ण बात, क्यों कुछ उपकरण के लिए चीजें (कुछ) काम कर रही हैं जब उन्हें माना नहीं जाना चाहिए।

तो यहां आपके मूलभूत सवालों पर कुछ अंतर्दृष्टि दी गई है:

  • एक टर्मिनल क्या समर्थन करता है और क्या रिपोर्ट करता है यह अलग चीजें हैं। उदाहरण के लिए सूक्ति टर्मिनल 256 रंगों को प्रदर्शित करने में सक्षम है, लेकिन यह स्वयं को एमुलेटर (8 रंग) के रूप में पर्यावरण ( चर के माध्यम से ) की घोषणा करता है ।$TERMxterm

  • tputजो कुछ भी TERMसेट है उसका पालन ​​करें जैसे उपकरण : tput colors8 प्रिंट कर सकते हैं, जबकि env TERM=xterm-256color tput colors256 प्रिंट करेगा, भले ही आपका टर्मिनल वास्तव में ऐसी क्षमताओं का समर्थन करता हो

  • vimTERMडिफ़ॉल्ट रूप से भी अनुसरण करें , लेकिन जैसा कि आपने इसे 256 रंगों (ध्वज या set t_Co=256) के माध्यम से उपयोग करने के लिए कहा था , यह 256 रंगों का उपयोग करेगा। और यह काम करता है क्योंकि आपका टर्मिनल वास्तव में इसका समर्थन करता है।

  • tmux, गनोम टर्मिनल की तरह, डिफ़ॉल्ट रूप से भी 8-रंग टर्मिनल के रूप में। लेकिन, गनोम टर्मिनल के विपरीत, यह केवल 256-रंग की क्षमता को सक्षम करता है यदि आप -2ध्वज का उपयोग करते हैं , जो इसे एक संगत एमुलेटर के रूप में भी रिपोर्ट करता xterm-256colorहै।

  • xterm, X11 के लिए टर्मिनल एमुलेटर सॉफ्टवेयर में , 256 रंगों का समर्थन करता है, निश्चित रूप से। लेकिन xtermजैसा TERM=xtermकि एक 8-रंग "मानक" है। इसका अर्थ है मूल की क्षमताएं xterm। जब इसे 256 रंगों का समर्थन करने के लिए उन्नत किया गया था, बहुत समय पहले, इसने इसके लिए शब्द गढ़ा था xterm-256color

तो यह सब नीचे आता है:

  • आपके टर्मिनल वास्तव में किन क्षमताओं का समर्थन करते हैं (और ऐसा करने में सक्षम हैं)

  • यह कैसे पर्यावरण के माध्यम से ऐसी क्षमताओं की रिपोर्ट करता है TERM

  • उपकरण कैसे व्याख्या करते हैं TERMऔर तदनुसार खुद को समायोजित करते हैं।

  • जैसा कि आप ऊपर से अनुमान लगा सकते हैं, अपनी और इस तरह की स्क्रिप्ट में हथौड़ा मारने से बचेंexport TERM=xterm-256color~/.bashrc । चूंकि उन फ़ाइलों को टर्मिनल की परवाह किए बिना निष्पादित किया जाता है जो आप वास्तव में उपयोग कर रहे हैं, यह आपके सभी टर्मिनलों को बनाएगा , जिसमें विंडोज से पोटीन, लिनक्स कंसोल टर्मिनल, आदि के साथ दूरस्थ कनेक्शन शामिल हैं, खुद को xterm-256color के रूप में रिपोर्ट करते हैं। जो कुछ के लिए सच हो सकता है लेकिन निश्चित रूप से सभी के लिए नहीं। उदाहरण के लिए, gettyजिस लिनक्स कंसोल के साथ आप पहुंचते हैं CTRL+ALT+1..6, वह नहीं है।

  • टर्मिनलों को खुद को "मानक" के रूप में रिपोर्ट करना चाहिए जो वे सबसे अधिक संगत हैं। यदि आप जानते हैं कि वे 256 रंगों को संभाल सकते हैं, तो उन्हें इस तरह से विज्ञापित करने के लिए कॉन्फ़िगर करें।

पिछले नहीं बल्कि कम से कम, एक अद्भुत पढ़ने TERMऔर 256 रंगों के बारे में है:

http://blog.sanctum.geek.nz/term-strings/

http://blog.sanctum.geek.nz/256-colour-terminals/


एक उदाहरण परिदृश्य या दो इस उत्तर के लिए अच्छा जोड़ होगा।
एलिय्याह लिन

5

मैं एक पूरक उत्तर प्रदान करूंगा जो केवल आपके अतिरिक्त प्रयोगों को संबोधित करता है क्योंकि वे सौरयुक्त निर्देशिका रंगों से संबंधित हैं

सेट अप

हमारे पास परीक्षण स्क्रिप्ट से समान रंग आउटपुट है। फर्क सिर्फ इतना है कि मैंने स्लिम , xcompmgr और नो DM के साथ Openboxlxterminal पर उपयोग किया । इसलिए मैं आसानी से एक कस्टम पैलेट सेट नहीं कर सकता हूं जैसा आपने किया था कि टर्मिनल एमुलेटर उन सेटिंग्स को जीयूआई में पेश नहीं करता है और इसके लिए कोई विशिष्ट विषय नहीं है (केवल कुछ टर्मिनल एमुलेटर के लिए मौजूद हैं)। इसलिए मैं सिर्फ कुछ ट्रांसलेंसी, अघोषित टर्मिनलों और उस नीले रंग को अग्रभूमि रंग के रूप में इस्तेमाल करता हूं, जिसमें ब्लू गेंटू बैकग्राउंड है। चूंकि मैं रंग फ़ाइलों के एसीसी संस्करणों का उपयोग नहीं कर सकता , इसलिए मैंने विशेष रूप से "नीच" सरल संस्करण के साथ परिणाम प्राप्त करने पर ध्यान केंद्रित किया है ।dircolors.256dark

मैंने निम्नलिखित प्रासंगिक कॉन्फ़िगरेशन और असंगतता मध्यम फ़ॉन्ट का उपयोग किया:

echo $TERM
xterm

.bashrc:
eval `dircolors /path/to/dircolors.256dark`

.vimrc:
set t_Co=256
let g:solarized_termcolors=256
syntax enable
set background=dark
colorscheme solarized

.tmux.conf:
nothing at all related to colors!
start tmux with "tmux -2"

Dircolors

नीचे दी गई छवि दिखाती है कि इन सेटिंग्स के साथ tmux के अंदर और बाहर दोनों क्या होता है । बाईं ओर का पहला तीसरा अनिर्णीत lxterminal विंडो खड़ी (3) दिखाता है । सही करने के लिए आप एक है tmux एक ही समान कार्यक्रमों (3) मैं भी शामिल किया है एक दिखा विधानसभा solarized xterm1 का उपयोग कर .Xresources फ़ाइल में शामिल दिखा नैनो पूरा पैकेज (और साथ यह नमूना xrdb -load ~/.Xresources):

यहाँ छवि विवरण दर्ज करें पूर्ण संकल्प पर निरीक्षण करने के लिए कृपया राइट क्लिक / व्यू इमेज देखें

ऊपरी बाएँ कोने में पहला टर्मिनल डिफ़ॉल्ट निर्देशिका रंग दिखाता है। नीचे नीचा सौर संस्करण है। .cमेरे द्वारा जोड़ी गई फ़ाइलों के लिए नीले रंग की पृष्ठभूमि पर गुलाबी को छोड़कर , यह उसी से समान है जो इससे अपेक्षित है (संदर्भ के लिए नीचे दी गई छवि देखें)। चूक की तुलना में, यह विस्तारित विशेषताओं अर्थात बोल्ड / लाइट / रिवर्स आदि पर आगे बनाता है और रंग स्पष्ट रूप से भिन्न होते हैं। .txtकई वितरण में फ़ाइलों के लिए डिफ़ॉल्ट रंग असाइनमेंट हरा है, लेकिन इसे सौर होने पर इसके बजाय ग्रे होना चाहिए । एक .si फ़ाइल जो हरे रंग के रूप में .txt फ़ाइल प्रदान करती है या तो सही ढंग से रेंडर नहीं कर रही है या बिल्कुल भी प्रतिपादन नहीं कर रही है। आपके द्वारा दिखाए गए दाएँ हाथ के परिणाम निम्नलिखित संदर्भ के संबंध में सही हैं (256dark):

यहाँ छवि विवरण दर्ज करें Solarized "अपमानित" dircolors संदर्भ नक्शा

टिप्पणियों

मेरे द्वारा उपयोग किए गए कॉन्फ़िगरेशन के साथ, परिणाम tmux के अंदर और बाहर समान दिखाई देते हैं (मैंने vi में टिप्पणियों (#) को उलट दिया है, लेकिन अन्यथा प्लगइन व्यवहार करता है जैसा कि इसे करना चाहिए और मल्टीप्लेक्स का इस पर कोई प्रभाव नहीं है)। फ़ॉन्ट्स सौरीकृत सुविधाओं की परिभाषा में एक बड़ी भूमिका निभाते हैं , और अनुभव को अधिकतम करने के लिए एक अच्छे फ़ॉन्ट की आवश्यकता होती है। Solarized निर्देशिका का उपयोग कर रंग 256dark फ़ाइल संदर्भ से मेल खाते और कोई विशेष टर्मिनल एमुलेटर विन्यास की आवश्यकता है।


निष्कर्ष

असल में एएनएसआई निर्देशिका रंग का प्रतिपादन बस है पूरी तरह से अलग अवक्रमित solarized (256dark) से। इतना कि एएनएसआई के तहत .txtफाइलें हरी हैं। एक का उपयोग दूसरे के प्रतिपादन को मान्य करने के लिए नहीं किया जा सकता है। दोनों समाधानों को अलग-अलग कॉन्फ़िगरेशन की आवश्यकता होती है और पूरी तरह से अलग परिणाम देते हैं।


"मैं अपने निष्कर्ष के बारे में नहीं समझता हूं कि 256dark एन्कोडिंग पर बहुत ध्यान नहीं दिया गया है, जहां वास्तव में यह एकमात्र रंग फ़ाइल है जो एक सौर निर्देशिका निर्देशिका की पैदावार करता है?" मेरा भ्रम इस तथ्य से उत्पन्न होता है कि मैं ansi-darkसही आउटपुट के रूप में विचार कर रहा था (क्योंकि यह गैर-अपमानित संस्करण का उपयोग कर रहा है)। फिर, यदि आप के आउटपुट को संदर्भ के रूप में लेते हैं 256dark, तो आपके पास उलट मानसिकता है।
At'old

"मेरे द्वारा उपयोग किए गए कॉन्फ़िगरेशन के साथ, परिणाम tmux के अंदर और बाहर समान दिखाई देते हैं" निश्चित रूप से, यदि आप 256 रंगों का उपयोग कर रहे हैं, तो निश्चित रूप से, वे उसी तरह से रेंडर करेंगे जहां आपके पास 256 रंगों का समर्थन है। "यह स्पष्ट नहीं है कि एएनआई समाधान इस संदर्भ में आगे क्या प्रदान करेगा ..." इसका परिणाम सही सोलाराइज्ड होगा (एक सन्निकटन के बजाय)।
एटकोल्ड

मै समझता हुँ। मैंने वास्तव में एएनआई भाग पर शोध नहीं किया है इसलिए मैं समझ नहीं सका कि आप कहां से आ रहे हैं। किसी भी मामले में मैंने पाया कि आपका क्यू आपको बहुत धन्यवाद देता है। हो सकता है कि मैं vi का उपयोग अब और करूं कि मुझे यह बहुत पसंद है। जैसा कि एएनआई के परिणामों के लिए, वास्तव में अब मैंने देखा है कि यह कैसा दिखता है ... वे केवल यहां रंगों के लिए दिखाते हैं । क्यों एच। क्या उनके पास अलग कोडिंग है ... मेरा मतलब है कि मैं देख रहा हूँ। हरे रंग का ... हरा हरा कैसे होता है? मैं उनकी परियोजना को गंभीरता से नहीं समझता।

हां, मैंने लेखक से व्यक्तिगत रूप से संपर्क किया और जवाब है कि "यह उनका व्यक्तिगत अनुकूलन था, क्योंकि वह इस तरह से पसंद करते थे"। मैं अवाक हूँ ... मुझे खुशी है कि मेरी क्यू ने किसी की मदद की :)
Atcold
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.