Я хотел бы настроить цвета подсказок в .bashrc
зависимости от цветов, которые он использует для переднего плана и фона.
Например, синий подскажет, если фон светлый, и бежевый, если он темный.
Есть ли способ узнать текущие настройки в скрипте?
Я хотел бы настроить цвета подсказок в .bashrc
зависимости от цветов, которые он использует для переднего плана и фона.
Например, синий подскажет, если фон светлый, и бежевый, если он темный.
Есть ли способ узнать текущие настройки в скрипте?
Письмо от Томаса Дики (сопровождающего 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
вид
поместите настройки в ваш ~/.Файл 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