Есть ли команда для отображения цветов при предоставлении шестнадцатеричном значении в терминале?

У вас есть несколько устройств, которые логически организованы в каталоге /dev, для жестких дисков (например) /dev/sda, или разделов, например /dev/sda1. В Unix эти отдельные устройства отображаются в иерархию файловой системы; все начинается с корневого каталога /, а под ним находятся подкаталоги. Чтобы подключить отдельные устройства к этой иерархии, вы монтируете их; например, точка монтирования /home/tom (первоначально создаваемый пустой каталог) может быть связана с устройством типа /dev/sda; это называется монтированием.

Чтение и запись выполняются как обычно; приложения будут использовать системные вызовы Unix, а при использовании оболочки вы можете использовать операторы перенаправления или специальные инструменты. Обычно пользователь "tom", у которого есть домашний каталог /home/tom, пишет в этот каталог или в подкаталоги. Если системный администратор (автоматически) смонтировал устройство в этот каталог, то нет ничего особенного. Пользователь "tom" будет просто писать в (или читать из) каталогов, где у него есть права; в своем собственном домашнем каталоге он обычно достаточно свободен.

0
19.11.2018, 16:14
2 ответа

Альтернатива:

show_colour() {
    perl -e 'foreach $a(@ARGV){print "\e[48:2::".join(":",unpack("C*",pack("H*",$a)))."m \e[49m "};print "\n"' "$@"
}

Пример использования:

$ show_colour "FF0088" "61E931" "1256E2"

Печатает пробелы с заданными цветами фона RGB. Обратите внимание, что вы не должны использовать #в коде RGB. Я оставляю удаление этого, если оно присутствует, в качестве упражнения для читателя. & #9786;

Это не изменяет палитру эмулятора терминала.

Внимание :Ваш эмулятор терминала должен понимать прямой цвет управляющие последовательности SGR, используя правильные формы ITU T.416. Некоторые делают. Лучше понять эти управляющие последовательности в некоторых давних -ошибочных формулировках. И вы обнаружите, что rxvt -unicode их вообще не понимает. Вместо одной распространенной ошибочной формулировки замените эту двусмысленную форму:

show_colour() {
    perl -e 'foreach $a(@ARGV){print "\e[48;2;".join(";",unpack("C*",pack("H*",$a)))."m \e[49m "};print "\n"' "$@"
}

Другой вариант:

Используйте мой переносной setterm, о котором я упоминал вhttps://unix.stackexchange.com/a/491883/5132. Он понимает шестнадцатеричное представление RGB и даже использует #в качестве индикатора для него.

Пример использования:

$ setterm -7 --background '#FF0088' ; printf ' ' ; \
> setterm -7 --background '#61E931' ; printf ' ' ; \
> setterm -7 --background '#1256E2' ; printf ' ' ; \
> setterm -7 --background default ; printf '\n'

Это печатается так же, как и в другом примере, на терминалах, которые понимают последовательности управления прямым цветом SGR.

Одно отличие от предыдущего варианта заключается в том, чтоsettermтакже работает на других терминалах. Он имеет запасные варианты для типов терминалов, которые не понимают последовательности прямого управления цветом SGR. На типах терминалов, которые понимают только индексированные цвета (, то есть только 256 цветов ), или на терминалах, которые понимают только 16 цветов AIXTerm,он пытается выбрать ближайший к желаемому цвету RGB:

% TERM=rxvt-256color setterm -7 --background "#FF0088" |hexdump -C
00000000  1b 5b 34 38 3b 35 3b 31  39 38 6d                 |.[48;5;198m|
0000000b
% TERM=ansi COLORTERM=16color setterm -7 --background "#FF0088" |hexdump -C
00000000  1b 5b 31 30 35 6d                                 |.[105m|
00000006
% TERM=ansi setterm -7 --background "#FF0088" |hexdump -C
00000000  1b 5b 34 35 6d                                    |.[45m|
00000005
%

Дополнительная литература

  • Джонатан де Бойн Поллард (2018 ).setterm. Направляющая ноша . Программное обеспечение.
8
28.01.2020, 02:16

Вы можете изменить цвет фона терминала с помощью:

printf '\e]11;%s\a' '#ff0000'

Что, по-видимому, работает с xterm, терминалами на основе VTE -(, такими как gnome-terminal), konsoleи rxvt, по крайней мере.

Вы также можете изменить другие цвета, кроме фона, если хотите. Например, изменить цвет 1 и отобразить прямоугольник этого цвета с помощью:

printf '\e]4;1;%s\a\e[0;41m   \n   \n\e[m' '#ff0000'

Для отображения нескольких цветов:

show_colour() {
  for i do
    printf '\e]4;%d;%s\a\e[0;48;5;%dm%s\e[m\n' "$#" "$i" "$#" "$i"
    shift
  done
}

show_colour black purple green '#ff0000'

Это необратимо изменяет палитру для этого окна эмулятора. Используйте tput ocдля восстановления цветов по умолчанию.

Другим вариантом может быть запуск:

xlogo -bg '#ff0000'

Или

rxvt -bg '#ff0000'
3
28.01.2020, 02:16

Теги

Похожие вопросы