สามารถเข้าถึงสีพื้นหลัง xterm แบบเป็นโปรแกรมได้หรือไม่


13

ฉันต้องการตั้งค่าสีพร้อมต์.bashrcขึ้นอยู่กับสีที่ใช้สำหรับพื้นหน้าและพื้นหลัง

ตัวอย่างเช่นพรอมต์สีน้ำเงินหากพื้นหลังสว่างและสีเบจถ้ามืด

มีวิธีหาการตั้งค่าปัจจุบันในสคริปต์หรือไม่?

คำตอบ:


22

อีเมลกลับมาจาก Thomas Dickey (ผู้ดูแลของ xterm) มีสิ่งนี้ ?หมายเหตุโดยเฉพาะในส่วนที่เกี่ยวกับ การPs = 4อ้างอิงถึงOSC Ps ; Pt STตำแหน่งที่OSC(คำนำหน้า "การควบคุมระบบปฏิบัติการ") ESC ]และST(คำต่อท้าย "String Terminator") คือ\(แบ็กสแลช) นี่4เป็นหนึ่งในคำสั่งย่อยที่เป็นไปได้สำหรับ OSC

สำหรับจานสีทั้งหมดนั้นสามารถตั้งค่า / ดึงข้อมูลโดยใช้ส่วนขยายสี 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
ว้าว ... คำตอบหลังจากสองปี ... ขอบคุณ ฉันไม่เข้าใจคำอธิบายมากนัก แต่ตัวอย่างก็ไม่ช่วยอะไรฉันเลย ...
ผันแปรได้

หึ ฉันกำลังเรียกใช้งานใหม่ใน xterm ที่เพิ่งสวย - xterm จริง - คราวนี้เมื่อทรัพยากร X ทั้งหมดของฉันหลุดออก (ซึ่งหมายความว่ามันให้ผลตอบแทน "f" s สำหรับสีแทนที่จะเป็น "0" ทั้งหมด) การใช้ / bin / echo หรือ echo ของ bash ทำงานได้ดี ตัวอย่างที่ฉันลองทำคือคัดลอก / วางโดยตรงจากโพสต์ด้านบน สภาพแวดล้อมของฉันคือ Ubuntu 11.10 (อนุพันธ์ของ Linux / Debian) ฉันไม่มีระบบปฏิบัติการที่แตกต่างกันในการทดสอบ
Alex North-Keys

ขึ้นอยู่กับการกำหนดค่าพรอมต์ของคุณมีโอกาสที่จะลงจอดที่ด้านบนของความพยายามของ xterm ในการป้อนข้อมูลลงในเทอร์มินัลเพื่อตอบคำถามของคุณ จากมุมมองของเชลล์การตอบกลับของ xterm ดูเหมือนว่าคุณกำลังพิมพ์อยู่
Alex North-Keys

1
อืม, gnome terminal ใน Ubuntu 12.04 อ้างว่ารองรับ xterm แต่ไม่ได้พิมพ์อะไรเลย ทำไมถึงเป็นอย่างนั้น?
Nik Reiman

1
ตอนนี้นี่คือของขึ้นขั้วบริสุทธิ์ คำตอบที่ยอดเยี่ยม
Qix - MONICA ถูกยกเลิกเมื่อ

0

ชนิดของ

ใส่การตั้งค่าลงในไฟล์ ~ / .Xdefaults ของคุณ:

xterm*foreground: blue
xterm*background: white

ในเปลือกของคุณคุณเพียงแค่ grep ค่า:

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

ไม่อย่างนั้นมันค่อนข้างยากที่จะรับค่าภายในของ xterm


ฉันไม่ได้ใช้ X :) ฉันใช้ rxvt จาก cygwin ที่ทำงานโดยไม่มีเซิร์ฟเวอร์ X นอกจากนี้ฉันต้องการที่จะสามารถใช้สีที่แตกต่างกันในโฮสต์ที่แตกต่างกันและสำหรับงานที่แตกต่างกันซึ่งต้องการให้ฉันค้นหา termincal สำหรับการตั้งค่า
ผันแปรได้

ดีคุณไม่ได้ระบุระบบปฏิบัติการของคุณ :)
akira

ขอโทษสำหรับเรื่องนั้น. เหตุผลที่ฉันไม่ได้ระบุก็เพราะฉันคาดหวังว่าวิธีการแก้ปัญหาจะขึ้นอยู่กับการสะท้อนสายเวทและได้รับข้อมูลกลับมาที่ stdout
ผันแปรได้

ปกติแล้วสิ่งที่คุณ "ก้อง" อยู่ในเชลล์ (bash, zsh) มันไม่ได้ไปที่ xterm (ยกเว้นในขั้นตอนสุดท้ายเมื่อมันมาถึงการแสดงผลลัพธ์ของคำสั่ง)
akira

-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

อ่านคำถามอีกครั้ง: OP ต้องการตั้งค่าสีของ BASH PROMPT ตามการตั้งค่าของ xterm OP ไม่ต้องการเปลี่ยนแหล่งข้อมูล
กิระ

ดูความคิดเห็นของเขาต่อคำตอบของคุณ เขาต้องการที่จะ "สอบถาม termincal [sic]" ดังนั้นเขาต้องการ xrdb -query
g33kz0r

ถ้าคุณต้องการให้เจาะจง: เขาต้องการเคียวรี rxvt โดยไม่เรียกใช้ xserver ที่ทำงานอยู่บน windows (ซึ่งเป็นไปได้) และxrdb -queryให้รายการทรัพยากรทั้งหมด .. ซึ่งคุณต้อง awk / grep อีกครั้งเพื่อไปยังเบื้องหน้า และนั่นคือสิ่งที่ฉันยอมรับแล้ว xrdb -mergeis offtopic สมบูรณ์ที่นี่ coz OP ไม่ต้องการแก้ไข xresources แต่ลักษณะที่ปรากฏของ bashprompt
กิระ
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.