Tput के 'setf' और 'setaf' में क्या अंतर है?


17

tputरंग सेट करने के लिए कमांड के दो अलग-अलग विकल्प हैं, setfऔर setaf, फिर भी वे दोनों मेरे कंप्यूटर पर ठीक काम करते हैं:

$ tput setf 2 && echo 'Hello world!'
$ tput setaf 2 && echo 'Hello world!'

लगता है के साथ एक समान द्वंद्व है setbऔर setab

दोनों विकल्पों में क्या अंतर है?


1
उस terminfo(5)आदमी पृष्ठ को देखें जो ncursesविवरण के लिए आता है ।
स्टीफन चेज़लस

जवाबों:


15

setfकेवल 8 रंगों तक सीमित है। setaf256 रंगों को सेट कर सकते हैं।

(सभी निम्न जानकारी urxvt के लिए विशिष्ट होगी, क्योंकि यह मेरा टर्मिनल है, लेकिन जानकारी अन्य टर्मिनलों की तरह ही होगी, यदि नहीं, तो भी ऐसा ही होगा)

दोनों setfऔर setafएक अलग भागने कोड प्रदान करते हैं। आप इसे निम्नलिखित में देख सकते हैं:

# tput setf 2 | xxd  
0000000: 1b5b 3332 6d                             .[32m

# tput setaf 2 | xxd 
0000000: 1b5b 3338 3b35 3b32 6d                   .[38;5;2m

मेरे urxvt(7)आदमी पृष्ठ से:

   "ESC [ Pm m"
       Character Attributes (SGR)
       ...
       Pm = 30 / 40       fg/bg Black
       Pm = 31 / 41       fg/bg Red
       Pm = 32 / 42       fg/bg Green
       Pm = 33 / 43       fg/bg Yellow
       Pm = 34 / 44       fg/bg Blue
       Pm = 35 / 45       fg/bg Magenta
       Pm = 36 / 46       fg/bg Cyan
       Pm = 37 / 47       fg/bg White
       Pm = 38;5 / 48;5   set fg/bg to colour #m (ISO 8613-6)

इस प्रकार उपरोक्त xxdआउटपुट से, हम देख सकते हैं कि इसका tput setf 2उपयोग किया गया है Pm = 32, जो रंग को हरे रंग में सेट करेगा। tput setaf 2दूसरी ओर, का उपयोग करता है Pm = 38;5, जो आईएसओ 8613-6 (भी हरा) में परिभाषित रंग कोड का प्रतिनिधित्व करता है।
आईएसओ 8613-6 में, रंग 0x00-0x07 मानक रंगों के समान हैं, और 0x08 - 0x0f मानक "बोल्ड" रंग हैं। एक बार जब आप 0x10-0xff पर पहुंच जाते हैं तो आपको नए रंग मिलते हैं।

विकिपीडिया से चोरी :

0x00-0x07:  standard colors (as in ESC [ 30..37 m)
0x08-0x0f:  high intensity colors (as in ESC [ 90..97 m)
0x10-0xe7:  6*6*6=216 colors: 16 + 36*r + 6*g + b (0≤r,g,b≤5)
0xe8-0xff:  grayscale from black to white in 24 steps

tputवास्तव में उपलब्ध एएनएसआई रंग-अनुक्रम श्रेणियों का उपयोग नहीं करता है , हालांकि। किसी के लिए n > 7, tput setaf nमेरे टर्मिनल में पाठ पर कोई प्रभाव नहीं है।
काइल स्ट्रैंड

वास्तव में, यह मेरे वातावरण का एक हिस्सा हो सकता है; मेरे लिए से आउटपुट tput setf 2और tput setaf 2कर रहे हैं दोनों .[32m
काइल स्ट्रैंड

5

मैनुअल से: man 5 terminfo

एक Tektronix प्रकार टर्मिनल, उपयोग पर वर्तमान अग्रभूमि या पृष्ठभूमि रंग बदलने के लिए Setaf (सेट एएनएसआई अग्रभूमि) और setab (सेट एएनएसआई पृष्ठभूमि) या setf (सेट अग्रभूमि) और setb (सेट पृष्ठभूमि)। ये एक पैरामीटर, रंग संख्या लेते हैं। SVr4 प्रलेखन केवल सेटफ / सेटैब का वर्णन करता है ; XPG4 मसौदा कहता है कि "अगर टर्मिनल का समर्थन करता है सेट पृष्ठभूमि और अग्रभूमि करने के लिए एएनएसआई भागने दृश्यों, वे के रूप में कोडित किया जाना चाहिए Setaf और setab , क्रमशः। टर्मिनल का समर्थन करता है सेट पृष्ठभूमि और अग्रभूमि करने के लिए अन्य भागने दृश्यों, वे के रूप में कोडित किया जाना चाहिए setf और setb, क्रमशः। Vidputs () फ़ंक्शन और रिफ्रेश फ़ंक्शन सेटैफ़ और सेटैब का उपयोग करते हैं यदि वे परिभाषित हैं। "

तो जवाब है: Setaf साधन सेट एएनएसआई अग्रभूमि , यानी एएनएसआई भागने दृश्यों का उपयोग करें, और setf का मतलब सेट अग्रभूमि (कुछ बच एएनएसआई के अलावा अन्य दृश्यों का उपयोग)।


3

क्षमताओं के दो सेट ANSI रंगों की सूची में लाल / नीले रंग के लिए अलग-अलग ऑर्डरिंग का उपयोग करते हैं।

जैसा कि कहा गया है, यह ncurses termfo मैनुअल पेज में समझाया गया है । कुछ इतिहास:

  • प्रारंभिक (1990 के दशक के मध्य) में, सबसे अधिक उपलब्ध "रंग" टर्मिनल विवरण का उपयोग किया गया setf/setb
  • Termcap उपयोगकर्ताओं को, जो इसी का इस्तेमाल किया के साथ कुछ भ्रम की स्थिति थी Sf/Sbबजाय कोड setaf/setab(और AF/ABtermcap के लिए) - लेकिन एएनएसआई भागने दृश्यों का उपयोग करते हुए (जो termcap साथ काम) के बजाय का उपयोग करने से सही एएनएसआई क्षमताओं के साथ क्षमताओं।
  • उसके कारण, आपको दो समान, उदाहरण के लिए, mgterm , interix , beterm (साथ ही FreeBSD की टर्मकैप फ़ाइल में कई प्रविष्टियाँ, फिर से इस प्रारंभिक भ्रम के कारण दूसरों के अपने कार्यक्रमों में संशोधन करने की अनिच्छा के साथ संयुक्त) के साथ टर्मिनल प्रविष्टियाँ मिलेंगी

ANSI setaf/setabको टर्मोइफ़ के इतिहास में काफी देर से जोड़ा गया था क्योंकि आप क्षमता स्ट्रिंग्स की सूची में अपनी स्थिति से अनुमान लगा सकते हैं । ध्यान रखें कि उन चरणों को कुछ वर्षों में जोड़ा गया था, और कुछ प्रणालियों में अंतर था (ncurses के कुछ उदाहरण हैं जैसे कि Caps.hpuxउन प्रणालियों से मिलान करने के लिए इसे संकलित करने के लिए)। इसका उपयोग कम संख्या में उपयोगी टर्मिनल विवरणों के लिए किया जाता है, जिन्हें संदर्भ के लिए उपयोग किया जा सकता है।

इन सबके साथ, यह तथ्य कि मौजूदा setf/setbतार एएनएसआई के आदेश से मेल नहीं खाते थे, पर तुरंत ध्यान नहीं दिया गया, जिसके कारण 1998 में कुछ सुधार हुए , और फ़ेक क्यों लाल / नीले परस्पर जुड़े हुए हैं?

हालांकि 8-रंग ANSI अनुक्रम को 16-रंगों में विस्तारित करना संभव था (यह मानकर कि 8-15 रंग 0-4 के उज्जवल संस्करण थे), setf/setbपहले 16 रंगों का विस्तार करने के लिए एक योजना का आविष्कार करने का कोई अच्छा कारण नहीं था ।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.