현재 xterm 배경색에 프로그래밍 방식으로 액세스 할 수 있습니까?


12

.bashrc전경 및 배경에 사용하는 색상 에 따라 프롬프트 색상을 설정하고 싶습니다 .

예를 들어 배경이 밝 으면 파란색으로, 어두우면 베이지 색으로 표시됩니다.

스크립트에서 현재 설정을 찾는 방법이 있습니까?

답변:


20

Thomas Dickey (xterm의 관리자)가 보낸 이메일에는이 내용이 있습니다. 특히에 대한 부분에 유의하십시오 ?. 은 Ps = 4을 참조 OSC Ps ; Pt ST경우 OSC(이하 "운영 시스템 제어"접두사) 인 ESC ]ST(이하 "문자열 터미네이터"접미사)입니다 \(백 슬래시). 는 4OSC의 가능한 하위 명령이다.

전체 팔레트의 경우 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 = 10Ps = 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

1
와우 ... 2 년 후의 응답 ... 감사합니다. 나는 설명을 이해하지 못했지만 예제는 나를 위해 아무것도하지 않습니다 ... 아무것도하지 않습니다.
Miserable Variable

허. 나는 최근 xterm에서 실제 xterm으로 다시 실행하고 있습니다. 이번에는 모든 X 자원이 제거되었습니다 (즉, 모든 "0"대신 색상에 대해 "f"가 모두 생성됨). / bin / echo 또는 bash의 내장 에코를 사용하면 정상적으로 작동합니다. 내가 시도한 예는 위의 게시물에서 직접 복사하여 붙여 넣었습니다. 내 환경은 Ubuntu 11.10 (Linux / Debian 파생 상품)입니다. 테스트하기에 다른 OS가 없습니다.
Alex North-Keys

프롬프트 구성 방법에 따라 쿼리에 대한 응답으로 터미널에 입력을 시도하는 xterm의 시도 위에 착륙 할 가능성이 있습니다. 쉘의 관점에서 xterm의 답장은 입력하는 것처럼 보입니다.
Alex North-Keys

1
흠, Ubuntu 12.04의 gnome 터미널은 xterm과 호환된다고 주장하지만 아무것도 인쇄하지 않습니다. 왜 그런 겁니까?
Nik Reiman

1
이제 이것은 순수한 부두 부두입니다. 훌륭한 답변입니다.
Qix

0

거의

~ / .Xdefaults 파일에 설정을 넣습니다.

xterm*foreground: blue
xterm*background: white

셸에서 값을 grep하면됩니다.

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

그렇지 않으면 xterm의 내부 값을 얻는 것이 매우 어렵습니다.


나는 심지어 X를 사용하지 않고 있습니다 :) 나는 X 서버없이 실행되는 cygwin의 rxvt를 사용하고 있습니다. 게다가 다른 호스트와 다른 작업에 다른 색상을 사용하고 싶습니다. 설정을 위해 용어를 쿼리해야합니다.
불가능한 변수

글쎄, 당신은 당신의 OS를 지정하지
않았습니다

미안합니다. 내가 지정하지 않은 이유는 솔루션이 일부 마법 문자열 에코를 기반으로하고 stdout에 대한 정보를 다시 얻는 것으로 예상했기 때문입니다.
불가능한 변수

글쎄, "echo"는 일반적으로 쉘 (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모든 자원을 나열합니다. 리소스를 지정하면 우분투에서 작동하지 않습니다.
akira

"무엇이든"에코 | 에 xrdb -merge
g33kz0r

질문을 다시 읽으십시오. OP는 xterm의 설정에 따라 BASH PROMPT의 색상을 설정하려고합니다. OP는 xresources를 변경하지 않습니다.
akira

귀하의 답변에 대한 그의 의견을 참조하십시오. "터미널 [sic]"을 쿼리하려고합니다. 따라서, 그는에 xrdb 원 - 쿼리
g33kz0r

당신이 그렇게 구체적이기를 원한다면 : 그는 Windows에서 실행중인 xserver없이 rxvt를 쿼리하고 싶습니다 (가능한 것입니다) xrdb -query. 모든 리소스 목록을 제공합니다. 그리고 그것은 내가 이미 인정한 것입니다. xrdb -mergecoz OP는 xresources를 수정하지 않고 bashprompt의 모양을 나타냅니다.
akira
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.