ฉันต้องการตั้งค่าสีพร้อมต์.bashrc
ขึ้นอยู่กับสีที่ใช้สำหรับพื้นหน้าและพื้นหลัง
ตัวอย่างเช่นพรอมต์สีน้ำเงินหากพื้นหลังสว่างและสีเบจถ้ามืด
มีวิธีหาการตั้งค่าปัจจุบันในสคริปต์หรือไม่?
ฉันต้องการตั้งค่าสีพร้อมต์.bashrc
ขึ้นอยู่กับสีที่ใช้สำหรับพื้นหน้าและพื้นหลัง
ตัวอย่างเช่นพรอมต์สีน้ำเงินหากพื้นหลังสว่างและสีเบจถ้ามืด
มีวิธีหาการตั้งค่าปัจจุบันในสคริปต์หรือไม่?
คำตอบ:
อีเมลกลับมาจาก 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
ชนิดของ
ใส่การตั้งค่าลงในไฟล์ ~ / .Xdefaults ของคุณ:
xterm*foreground: blue
xterm*background: white
ในเปลือกของคุณคุณเพียงแค่ grep ค่า:
awk '/xterm\*foreground:(.*)/ { print $2 }' < .Xdefaults
ไม่อย่างนั้นมันค่อนข้างยากที่จะรับค่าภายในของ xterm
ที่จริงฉันคิดว่าคุณต้องการสิ่งนี้:
% xrdb -query
ที่จะแสดงรายการการตั้งค่าสำหรับคุณ ดูสิ่งนี้ด้วย:
http://docstore.mik.ua/orelly/unix3/upt/ch06_08.htm
ในการแก้ไขรันไทม์ให้ใช้:
% echo "some*setting: somevalue" | xrdb -merge
-query
แสดงรายการทรัพยากรทั้งหมด การระบุทรัพยากรใช้งานไม่ได้บน Ubuntu ของฉัน
xrdb -query
ให้รายการทรัพยากรทั้งหมด .. ซึ่งคุณต้อง awk / grep อีกครั้งเพื่อไปยังเบื้องหน้า และนั่นคือสิ่งที่ฉันยอมรับแล้ว xrdb -merge
is offtopic สมบูรณ์ที่นี่ coz OP ไม่ต้องการแก้ไข xresources แต่ลักษณะที่ปรากฏของ bashprompt