Я можу змінити колір через перевагу, але як я можу змінити колір тла та колір тексту терміналу через командний рядок?
dconf
. Я вже писав відповідь на подібне запитання раніше: askubuntu.com/a/628129/295286
\033[00;34mFOO\033[00m
Я можу змінити колір через перевагу, але як я можу змінити колір тла та колір тексту терміналу через командний рядок?
dconf
. Я вже писав відповідь на подібне запитання раніше: askubuntu.com/a/628129/295286
\033[00;34mFOO\033[00m
Відповіді:
На певних терміналах, сумісних з XTerm / ANSI (наприклад, xterm
та gnome-terminal
), ви можете встановити кольори за допомогою палітри, більшої за 8-16-кольорову палітру за замовчуванням (наприклад, використовуючи палітру на 88 кольорів, 256 кольорів або 16777216 кольорів (RGB) ; обидва xterm
та gnome-terminal
підтримують 256-кольорову і 16777216-кольорову (RGB) палітру); майте на увазі, що оболонка може змінити це (це стосується, наприклад, для zsh
).
Ось сценарій для переліку кольорів у 256-кольоровій палітрі разом з їх кольором ANSI у терміналах, сумісних з XTerm / ANSI, з підтримкою 256-кольорової палітри:
#!/bin/bash
for((i=16; i<256; i++)); do
printf "\e[48;5;${i}m%03d" $i;
printf '\e[0m';
[ ! $((($i - 15) % 6)) -eq 0 ] && printf ' ' || printf '\n'
done
Залежно від того, чи потрібно застосувати колір на передньому плані чи на тлі, використовуйте <fg_bg>
значення 38
або 48
(відповідно) у такій команді:
printf '\e[<fg_bg>;5;<ANSI_color_code>m'
Наприклад, встановити колір переднього плану ( <fg_bg>
= 38
) до червоного ( <ANSI_color_code>
= 196
), а колір фону ( <fg_bg>
= 48
) - чорний ( <ANSI_color_code>
= 0
):
printf '\e[38;5;196m Foreground color: red\n'
printf '\e[48;5;0m Background color: black\n'
Необхідно перемальовувати підказку, використовуючи printf '\e[K'
для того, щоб колір фону застосовувався до всієї лінії та для того, щоб колір переднього плану застосовувався до курсору:
Те ж саме можна досягти, використовуючи значення RGB замість кольорів ANSI в сумісному терміналі; залежно від того, чи бажаєте ви застосувати колір на передньому плані чи на тлі, використовуйте <fg_bg>
значення 38
або 48
(відповідно) у такій команді:
printf '\e[<fg_bg>;2;<R>;<G>;<B>m'
Наприклад, встановити колір переднього плану ( <fg_bg>
= 38
) на червоний ( <R>
= 255
, <G>
= 0
, <B>
= 0
), а колір фону ( <fg_bg>
= 48
) на чорний ( <R>
= 0
, <G>
= 0
, <B>
= 0
):
printf '\e[38;2;255;0;0m Foreground color: red\n'
printf '\e[48;2;0;0;0m Background color: black\n'
Знову ж таки, потрібно перемальовувати підказку, використовуючи printf '\e[K'
для того, щоб колір фону застосовувався до всієї лінії та для того, щоб колір переднього плану застосовувався до курсору:
Використовуючи обидва методи, ви можете printf '\e[0m'
скинути всі атрибути:
xterm
і gnome-terminal
розпізнають \ e [38/48; 2; R; G; Bm істинні послідовності кольорів; однак xterm
округлює фактичний колір до найближчого у своїй 256-кольоровій палітрі. gnome-terminal
відображає точний справжній колір, вказаний у послідовності евакуації.
xterm
), якщо курсор знаходиться в самому правому краї (візуально відображається в правому правому стовпчику, але логічно вже поза цим, оскільки символ був надрукований у самому правому стовпчику), цей останній лист викреслюється. Див., Наприклад, bugzilla.gnome.org/show_bug.cgi?id=740789 або savannah.gnu.org/bugs/?36831 .
Інформація, яку ви знайдете на цій сторінці , крім стовпця попереднього перегляду:
Послідовності складаються з символу Escape (часто представлений символом " ^[
" або " <Esc>
"), за яким слідують деякі інші символи: " ^[FCm
" (де FC
є одне з чисел у наведеному нижче списку).
В bash
, то Escкод може бути одним з наступних способів :
\e
\033
(восьмеричний)\x1B
(шістнадцятковий)Примітка 1:\e[0m
послідовність " " видаляє всі атрибути (форматування та кольори). Це може бути хорошою ідеєю, щоб додати його в кінці кожного кольорового тексту.
Примітка 2: Кольори переднього плану та фону можуть відрізнятися, залежно від конфігурації терміналу, і не всі кольори підтримуються .
0
: Скидання / видалення всіх атрибутів модифікатора, переднього плану та фону: echo -e "\e[0mNormal Text"
1
: Сміливий / яскравий: echo -e "Normal \e[1mBold"
2
: Dim: echo -e "Normal \e[2mDim"
4
: Підкреслено: echo -e "Normal \e[4mUnderlined"
5
: Блимає (не працює в більшості терміналів, крім XTerm): echo -e "Normal \e[5mBlink"
7
: Зворотний / зворотний: echo -e "Normal \e[7minverted"
8
: Приховано (корисно для конфіденційної інформації): echo -e "Normal \e[8mHidden Input"
21
: Скидання / видалення жирного / яскравого: echo -e "Normal \e[1mBold \e[21mNormal"
22
: Скидання / видалення затемнення: echo -e "Normal \e[2mDim \e[22mNormal"
24
: Скидання / видалення підкреслення: echo -e "Normal \e[4mUnderlined \e[24mNormal"
25
: Скидання / видалення блимання: echo -e "Normal \e[5mBlink \e[25mNormal"
27
: Скидання / видалення зворотного / інвертування: echo -e "Normal \e[7minverted \e[27mNormal"
28
: Скидання / видалення прихованого: echo -e "Normal \e[8mHidden \e[28mNormal"
39
: За замовчуванням (зазвичай зелений, білий або світло-сірий): echo -e "Default \e[39mDefault"
30
: Чорний: echo -e "Default \e[30mBlack"
(найкраще поєднується з кольором фону: echo -e "Default \e[30;107mBlack on white"
)31
: Червоний (не використовуйте із зеленим фоном)32
: Зелений33
: Жовтий34
: Синій35
: Пурпуровий / фіолетовий36
: Cyan37
: Світло-сірий90
: Темно-сірий91
: Світло-червоний92
: Світло-зелений93
: Світло-жовтий94
: Блакитний95
: Світло-пурпурна / рожева96
: Світло-блакитний97
: Білий49
: Колір тла за замовчуванням (зазвичай чорний або синій)40
: Чорний41
: Червоний42
: Зелений43
: Жовтий44
: Синій45
: Пурпуровий / фіолетовий46
: Cyan47
: Світло-сірий (не використовуйте з білим переднім планом)100
: Темно-сірий (не використовуйте чорний передній план)101
: Світло-червоний102
: Світло-зелений (не використовуйте білий колір переднього плану)103
: Світло-жовтий (не використовуйте білий колір переднього плану)104
: Світло-блакитний (не використовуйте світло-жовтий передній план)105
: Світло-пурпурний / рожевий (не використовуйте світлий передній план)106
: Світло-блакитний (не використовуйте білий колір переднього плану)107
: Білий (не використовуйте світлий передній план)Для встановлення одночасно кольорів переднього плану та фону використовуйте форму echo -e "\e[S;FG;BGm"
. Наприклад: echo -e "\e[1;97;41m"
(сміливий білий передній план на червоному тлі)
256 варіантів кольорів див. На сторінці джерела.
Якщо це призначено для зміни кольорів на випадковій основі :
Ви можете використовувати команду setterm :
setterm -term linux -back <background_colour> -fore <text_color> -clear
з кольорів можна вибрати (як передній, так і фоновий):
black|blue|green|cyan|red|magenta|yellow|white|default
для додаткових варіантів:
setterm -help
14.04 я не знайшов можливості використовувати dconf
для встановлення кольорів або терміналу. Однак ви можете використовуватиgconftool
Спочатку потрібно отримати ім’я вашого профілю:
gconftool-2 --get /apps/gnome-terminal/global/profile_list
Потім, щоб встановити кольори тексту вашого профілю:
gconftool-2 --set "/apps/gnome-terminal/profiles/<profile_name>/foreground_color" --type string "#FFFFFF"
наприклад, щоб встановити білий колір тексту
Те ж саме з кольором тла:
gconftool-2 --set "/apps/gnome-terminal/profiles/<profile_name>/background_color" --type string "#000000"
наприклад, встановити колір тла на чорний
Альтернативно, щоб встановити назву кольору (кольорів), ви можете просто використовувати white
або green
з тієї ж палітри, що і команда setterm, наприклад:
gconftool-2 --set "/apps/gnome-terminal/profiles/<profile_name>/background_color" --type string black
dconf write /org/gnome/terminal/legacy/profiles:/:<profile_id>/background-color "'rgb(0,0,0)'"
зробив трюк.
gconftool-2
(Для Ubuntu 14.04 і , можливо , кілька наступних випусків), або , dconf
або gsettings
на новіших версіях налаштувань змінити Ubuntu Gnome-терміналу, і вступає в силу негайно на всіх вкладках і вікнах одного і того ж профілю. Я не думаю, що ОП шукала такої поведінки.
Різні кольорові коди, які використовуються для отримання кольорового виводу, також можуть використовуватися для отримання кольорових фонів :
40 black
41 red
42 green
43 yellow
44 blue
45 magenta
46 cyan
47 white
Тому наступна команда перетворює мій фон у червоний колір:
$ echo -e '\e[0;41m'
Залежно від оболонки, емулятора терміналу тощо, можливо, вам не знадобиться -e
.
Дивіться відповідь kos для переключення переднього плану або фону на певний колір палітри або навіть прямий колір RGB в деяких терміналах. Ефект такої послідовності триває до тих пір, поки не буде обраний інший колір (або він повернеться до типового).
Інший підхід, підтримуваний деякими емуляторами терміналів, полягає у переосмисленні точних RGB-значень кольорів переднього плану та фонових кольорів за замовчуванням, використовуючи послідовності виходу OSC 10/11:
echo -ne '\e]10;#123456\e\\' # set default foreground to #123456
echo -ne '\e]11;#abcdef\e\\' # set default background to #abcdef
Це, швидше за все, триватиме набагато довше (до відміни іншим OSC 10/11 або скидання через OSC 110/111), але на відміну від підходу dconf, це все ще впливає лише на поточний термінал.