Я хотел бы настроить цвета подсказок в .bashrc
зависимости от цветов, которые он использует для переднего плана и фона.
Например, синий подсвечивает, если фон светлый, и бежевый, если он темный.
Есть ли способ узнать текущие настройки в скрипте?
Я хотел бы настроить цвета подсказок в .bashrc
зависимости от цветов, которые он использует для переднего плана и фона.
Например, синий подсвечивает, если фон светлый, и бежевый, если он темный.
Есть ли способ узнать текущие настройки в скрипте?
Ответы:
Письмо от Томаса Дики (сопровождающего xterm) содержит это. Обратите внимание, в частности, часть о ?
. Ps = 4
Относится к OSC Ps ; Pt ST
где OSC
( «Контроль операционной системы» префикс) ESC ]
и ST
(далее «Строка 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
-query
перечисляет все ресурсы. указание ресурса не работает на моем Ubuntu.
xrdb -query
просто выдаст вам список всех ресурсов ... которые вы должны снова выполнить с помощью awk / grep, чтобы перейти на передний план. и это то, что я уже признал. xrdb -merge
здесь совершенно оффтопно, потому что OP не хочет модифицировать внешние ресурсы, кроме появления bashprompt.