11

Я хотел бы настроить цвета подсказок в .bashrc зависимости от цветов, которые он использует для переднего плана и фона.

Например, синий подскажет, если фон светлый, и бежевый, если он темный.

Есть ли способ узнать текущие настройки в скрипте?

3 ответа3

19

Письмо от Томаса Дики (сопровождающего xterm) содержит это. Обратите внимание, в частности, часть о ? , Ps = 4 относится к OSC Ps ; Pt ST где OSC (префикс "Operating System Control") - это 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
0

вид

поместите настройки в ваш ~/.Файл Xdefaults:

xterm*foreground: blue
xterm*background: white

в вашей оболочке вы просто grep значения:

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

в противном случае довольно сложно получить некоторые внутренние значения xterm.

-1

На самом деле я думаю, что вы хотите этого:

% xrdb -query

Это будет список настроек для вас. Смотрите также:

http://docstore.mik.ua/orelly/unix3/upt/ch06_08.htm

Чтобы изменить среду выполнения, используйте:

% echo "some*setting: somevalue" | xrdb -merge

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .