Câu trả lời:
Email trở lại từ Thomas Dickey (người bảo trì xterm) có cái này. Đặc biệt lưu ý phần về ?
. Tham chiếu Ps = 4
đến OSC Ps ; Pt ST
vị trí OSC
(tiền tố "Điều khiển hệ điều hành") ESC ]
và ST
(hậu tố "Chuỗi kết thúc chuỗi") là \
(dấu gạch chéo ngược). Đây 4
là một trong những tiểu ban có thể có của OSC.
Đối với toàn bộ bảng màu, có thể được đặt / truy xuất bằng cách sử dụng phần mở rộng màu 88/256. Trong ctlseqs.txt, nó được tóm tắt tại đây:
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.
Một chút sau này trong các tài liệu có nhiều lệnh con OSC, Ps = 10
và Ps = 11
, và những người khác.
Ps = 1 0 -> Change VT100 text foreground color to Pt. Ps = 1 1 -> Change VT100 text background color to Pt.
Ví dụ - điều này truy vấn nền bằng cách sử dụng Ps = "11"
(từ ngay phía trên) và Pt = "?"
, cắm vào OSC Ps ; Pt ST
. Trong tiếng vang, \033
đang được sử dụng để thoát và \\
cho dấu gạch chéo ngược cuối cùng.
echo -en "\033]11;?\033\\"
Đầu ra:
^[]11;rgb:0000/0000/0000^[\
Cảnh báo: Màu được trả về không phản ánh liệu video đảo ngược, như -rv
, có được bật hay không và thu thập thông tin qua ~ 260 màu có sẵn thông qua OSC 4 ; c ; ? ST
không hiển thị bất kỳ màu nào cả hai đều theo nền VÀ thay đổi với video đảo ngược. Vì nhiều người dùng đặt nền tối bằng cách chỉ sử dụng xterm -rv
, điều này làm phức tạp việc xác định xem nền có thực sự tối hay không. Hầu hết các màu không điều chỉnh theo -rv
, một trong hai.
Một tập lệnh để thực hiện truy vấn đầy đủ và thực sự nắm bắt trả lời từ 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
loại
đặt cài đặt vào tệp ~ / .Xdefaults của bạn:
xterm*foreground: blue
xterm*background: white
trong shell của bạn, bạn chỉ cần grep các giá trị:
awk '/xterm\*foreground:(.*)/ { print $2 }' < .Xdefaults
mặt khác, thật khó để có được một số giá trị nội bộ của xterm.
Thật ra tôi nghĩ bạn muốn điều này:
% xrdb -query
Điều đó sẽ liệt kê các cài đặt cho bạn. Xem thêm:
http://docstore.mik.ua/orelly/unix3/upt/ch06_08.htm
Để sửa đổi thời gian chạy, sử dụng:
% echo "some*setting: somevalue" | xrdb -merge
-query
liệt kê tất cả các nguồn lực. chỉ định tài nguyên không hoạt động trên Ubuntu của tôi.
xrdb -query
chỉ cung cấp cho bạn danh sách tất cả các tài nguyên .. mà bạn phải awk / grep một lần nữa để đến tiền cảnh. và đó là những gì tôi đã thừa nhận. xrdb -merge
là hoàn toàn không chính thức ở đây vì OP không muốn sửa đổi xresource nhưng sự xuất hiện của bashprompt.