वर्तमान xterm पृष्ठभूमि रंग के लिए प्रोग्रामेटिक एक्सेस?


13

मैं .bashrcअग्रभूमि और पृष्ठभूमि के लिए उपयोग किए जाने वाले रंगों के आधार पर शीघ्र रंगों को सेटअप करना चाहूंगा ।

उदाहरण के लिए, नीला प्रॉम्प्ट यदि पृष्ठभूमि हल्का और बेज रंग का है तो यह अंधेरा है।

क्या स्क्रिप्ट में वर्तमान सेटिंग्स का पता लगाने का कोई तरीका है?

जवाबों:


22

थॉमस डिकी (xterm के अनुचर) के ईमेल वापस आ गए हैं। विशेष रूप से भाग के बारे में ध्यान दें ?Ps = 4को संदर्भित करता है OSC Ps ; Pt ST, जहां OSC( "ऑपरेटिंग सिस्टम नियंत्रण" उपसर्ग) है ESC ]और ST( "स्ट्रिंग टर्मिनेटर" प्रत्यय) है \(बैकस्लैश)। 4ओएससी के लिए संभव subcommands से एक है।

पूरे पैलेट के लिए, जिसे 88/256 रंग एक्सटेंशन का उपयोग करके सेट / पुनर्प्राप्त किया जा सकता है। Ctlseqs.txt में, इसे यहाँ संक्षेप में प्रस्तुत किया गया है:

  Ps = 4 ; c ; spec -> Change Color Number c to the color
specified by spec.  This can be a name or RGB specification as
per XParseColor.  Any number of c/spec pairs may be given.
The color numbers correspond to the ANSI colors 0-7, their
bright versions 8-15, and if supported, the remainder of the
88-color or 256-color table.

If a "?" is given rather than a name or RGB specification,
xterm replies with a control sequence of the same form which
can be used to set the corresponding color.  Because more than
one pair of color number and specification can be given in one
control sequence, xterm can make more than one reply.

डॉक्स में थोड़ा बाद में अधिक OSC उप Ps = 10-क्षेत्र हैं Ps = 11, और अन्य।

Ps = 1 0  -> Change VT100 text foreground color to Pt.
Ps = 1 1  -> Change VT100 text background color to Pt.

उदाहरण - यह Ps = "11"(केवल ऊपर से) पृष्ठभूमि का उपयोग कर पूछताछ करता है और Pt = "?"प्लग इन किया जाता है OSC Ps ; Pt ST। गूंज में, \033भागने के लिए, और \\अंतिम बैकस्लैश के लिए उपयोग किया जा रहा है ।

echo -en "\033]11;?\033\\"

आउटपुट:

^[]11;rgb:0000/0000/0000^[\ 

चेतावनी: लौटा हुआ रंग प्रतिबिंबित नहीं करता है कि रिवर्स वीडियो, जैसे -rv, सक्षम है, और ~ 260 रंगों के माध्यम से क्रॉलिंग उपलब्ध OSC 4 ; c ; ? STहै जो किसी भी तरह से नहीं दिखाता है कि दोनों पृष्ठभूमि का पालन करें और रिवर्स वीडियो के साथ बदलें। चूंकि कई उपयोगकर्ता बस का उपयोग करके एक अंधेरे पृष्ठभूमि को सेट करते हैं xterm -rv, यह यह निर्धारित करता है कि पृष्ठभूमि वास्तव में अंधेरा है या नहीं। अधिकांश रंग या तो समायोजित नहीं होते हैं-rv

पूर्ण क्वेरी करने के लिए एक स्क्रिप्ट और वास्तव में xterm से उत्तर पर कब्जा:

#!/bin/bash
success=false
exec < /dev/tty
oldstty=$(stty -g)
stty raw -echo min 0
col=11      # background
#          OSC   Ps  ;Pt ST
echo -en "\033]${col};?\033\\" >/dev/tty  # echo opts differ w/ OSes
result=
if IFS=';' read -r -d '\' color ; then
    result=$(echo $color | sed 's/^.*\;//;s/[^rgb:0-9a-f/]//g')
    success=true
fi
stty $oldstty
echo $result
$success

1
वाह ... दो साल बाद एक प्रतिक्रिया ... धन्यवाद। मैं काफी समझ नहीं पाया, लेकिन उदाहरण मेरे लिए कुछ भी नहीं करता ... कुछ भी नहीं।
दुस्साहसिक चर

हे। मैं इसे हाल ही में एक एक्सटरम में फिर से चला रहा हूं - एक वास्तविक एक्सटरम - इस बार मेरे सभी एक्स संसाधनों को छीन लिया गया (जिसका अर्थ है कि यह सभी "0" एस के बजाय रंगों के लिए सभी "एफ" पैदावार देता है)। / बिन / प्रतिध्वनि या बैश की निर्मित प्रतिध्वनि का प्रयोग ठीक काम करता है। मैंने जो उदाहरण दिया, वह ऊपर की पोस्ट से सीधे कॉपी / पेस्ट किया गया था। मेरा वातावरण Ubuntu 11.10 (एक लिनक्स / डेबियन व्युत्पन्न) है। मेरे पास परीक्षण करने के लिए एक भिन्न OS नहीं है।
एलेक्स नॉर्थ-कीज़

आपके प्रॉम्प्ट को कैसे कॉन्फ़िगर किया गया है, इसके आधार पर, आपके क्वेरी के जवाब में आपके टर्मिनल में इनपुट इनपुट करने के लिए xterm के प्रयास के शीर्ष पर उतरने का एक मौका है। आपके शेल के नजरिए से, xterm का जवाब सिर्फ आपको टाइप करने जैसा लगता है।
एलेक्स नॉर्थ-कीज़

1
हम्म, Ubuntu 12.04 में सूक्ति टर्मिनल xterm- संगत होने का दावा करता है, लेकिन कुछ भी वापस प्रिंट नहीं करता है। ऐसा क्यों है?
निक रीमन सेप

1
अब यह शुद्ध टर्मिनल वूडू है। बहुत बढ़िया जवाब।
Qix - मोनिका ने

0

एक प्रकार का

सेटिंग को अपनी ~ / .Xdefaults फ़ाइल में डालें:

xterm*foreground: blue
xterm*background: white

अपने शेल में आप सिर्फ मूल्यों को टटोलते हैं:

awk '/xterm\*foreground:(.*)/ { print $2 }' < .Xdefaults

अन्यथा एक्सटरम के कुछ आंतरिक मूल्यों को प्राप्त करना बहुत कठिन है।


मैं एक्स का उपयोग भी नहीं कर रहा हूं :) मैं साइबरविन से एक एक्सएक्सएक्स का उपयोग कर रहा हूं जो एक्स सर्वर के बिना चलता है। इसके अलावा मैं अलग-अलग मेजबानों पर और अलग-अलग कार्यों के लिए अलग-अलग रंगों का उपयोग करने में सक्षम होना चाहता हूं, जिसके लिए मुझे सेटिंग्स के लिए शब्दावली की आवश्यकता होती है।
दु: खद चर

ठीक है, आपने
अकीरा

उसके लिए माफ़ करना। मेरे द्वारा निर्दिष्ट नहीं किए जाने का कारण यह है कि मैंने उम्मीद की थी कि समाधान कुछ जादू के तारों की गूंज पर आधारित होगा और स्टॉटआउट पर कुछ जानकारी वापस मिलेगी।
प्रात:

ठीक है, जो आप "इको" सामान्य रूप से शेल (बैश, ज़श) के अंदर रहते हैं, यह xterm पर नहीं जाता है (अंतिम चरण को छोड़कर जब यह कमांड के आउटपुट को प्रदर्शित करने की बात आती है)।
अकीरा

-1 awk नौकरी के लिए गलत उपकरण है।
g33kz0r

-1

वास्तव में मुझे लगता है कि आप यह चाहते हैं:

% xrdb -query

यह आपके लिए सेटिंग्स को सूचीबद्ध करेगा। यह सभी देखें:

http://docstore.mik.ua/orelly/unix3/upt/ch06_08.htm

रनटाइम को संशोधित करने के लिए, उपयोग करें:

% echo "some*setting: somevalue" | xrdb -merge

-queryसभी संसाधनों को सूचीबद्ध करता है। संसाधन निर्दिष्ट करना मेरे ubuntu पर काम नहीं करता है।
अकीरा

गूंज "जो भी" | xrdb -merge
g33kz0r

प्रश्न को फिर से लिखें: ओपी xterm की सेटिंग के अनुसार BASH PROMPT के रंग सेट करना चाहता है। ओपी xresources बदलना नहीं चाहता है।
अकीरा

अपने जवाब के लिए उसकी टिप्पणी देखें। वह "टर्मिनेटल [sic] क्वेरी करना चाहता है"। इस प्रकार, वह
19rd पर

यदि आप वह विशिष्ट होना चाहते हैं: वह rxvt से क्वेरी करना चाहता है ताकि खिड़कियों पर (जो संभव है) चल रहे एक्ससर्वर को हटा दें और xrdb -queryबस आपको सभी संसाधनों की सूची प्रदान कर दे .. जिसे आपको अग्रभूमि में लाने के लिए फिर से जाग / grep करना होगा। और जो मैंने पहले ही स्वीकार किया था, वह है। xrdb -mergeयहाँ पूरी तरह से ऑफॉपिक है coz OP xresources को संशोधित नहीं करना चाहता है लेकिन बैशप्रॉप्ट की उपस्थिति है।
अकीरा
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.