.bashrc
전경 및 배경에 사용하는 색상 에 따라 프롬프트 색상을 설정하고 싶습니다 .
예를 들어 배경이 밝 으면 파란색으로, 어두우면 베이지 색으로 표시됩니다.
스크립트에서 현재 설정을 찾는 방법이 있습니까?
.bashrc
전경 및 배경에 사용하는 색상 에 따라 프롬프트 색상을 설정하고 싶습니다 .
예를 들어 배경이 밝 으면 파란색으로, 어두우면 베이지 색으로 표시됩니다.
스크립트에서 현재 설정을 찾는 방법이 있습니까?
답변:
Thomas Dickey (xterm의 관리자)가 보낸 이메일에는이 내용이 있습니다. 특히에 대한 부분에 유의하십시오 ?
. 은 Ps = 4
을 참조 OSC Ps ; Pt ST
경우 OSC
(이하 "운영 시스템 제어"접두사) 인 ESC ]
과 ST
(이하 "문자열 터미네이터"접미사)입니다 \
(백 슬래시). 는 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
해도 배경을 따르고 반전 동영상으로 변경되는 것은 표시되지 않습니다. 많은 사용자가 just을 사용하여 어두운 배경을 설정하므로 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
모든 자원을 나열합니다. 리소스를 지정하면 우분투에서 작동하지 않습니다.
xrdb -query
. 모든 리소스 목록을 제공합니다. 그리고 그것은 내가 이미 인정한 것입니다. xrdb -merge
coz OP는 xresources를 수정하지 않고 bashprompt의 모양을 나타냅니다.