在终端中给出十六进制值时是否有显示颜色的命令?

Ant*_*ack 3 command-line colors terminal

如何在终端中显示颜色以处理十六进制颜色值?它对于主题化、XResources 等很有用。例如:

$ command '#FF0000'
// display a red square
Run Code Online (Sandbox Code Playgroud)

我在 manjaro 中使用 urxvt、i3wm。

Jde*_*eBP 8

替代:

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

用法示例:

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

这将打印具有给定 RGB 背景颜色的空间。请注意,您一定不能#在 RGB 代码中使用。如果存在,我将剥离它作为读者的练习。☺

这不会改变终端模拟器的调色板。

警告:您的终端仿真器必须使用正确的 ITU T.416 格式理解直接彩色SGR 控制序列。有几个。更多地了解某些长期存在的错误公式中的这些控制序列。你会发现 rxvt-unicode 根本不理解它们。对于一个常见的错误表述,请替换以下模棱两可的形式:

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

另一种选择:

使用我settermhttps://unix.stackexchange.com/a/491883/5132 中提到的便携式。它理解十六进制 RGB 表示法,甚至#用作它的指示符。

用法示例:

$ setterm -7 --background '#FF0088'; 打印''; \
> setterm -7 --background '#61E931'; 打印''; \
> setterm -7 --background '#1256E2'; 打印''; \
> setterm -7 --background 默认值;打印'\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. 小吃指南。软件。