如何在终端中显示颜色以处理十六进制颜色值?它对于主题、XResources 等很有用。例如:
$ command '#FF0000'
// display a red square
我在manjaro中使用urxvt、i3wm。
答案1
替代:
显示颜色(){ perl -e 'foreach $a(@ARGV){print "\e[48:2::".join(":",unpack("C*",pack("H*",$a)))。 "m \e[49m "};打印 "\n"' "$@" }
用法示例:
$ show_color "FF0088" "61E931" "1256E2"
这将打印具有给定 RGB 背景颜色的空间。请注意,您一定不能#
在 RGB 代码中使用。如果存在的话,我会将其剥离作为读者的练习。 ☺
这不会改变终端模拟器的调色板。
警告:您的终端仿真器必须理解直接颜色SGR 控制序列,使用正确的 ITU T.416 形式。有一些是这样的。更多地了解某些长期存在的错误配方中的这些控制序列。你会发现 rxvt-unicode 根本不理解它们。对于一种常见的错误表述,请用以下模棱两可的形式替代:
显示颜色(){ perl -e 'foreach $a(@ARGV){print "\e[48;2;".join(";",unpack("C*",pack("H*",$a)))." m \e[49m "};打印 "\n"' "$@" }
另一种选择:
使用我的便携式电脑setterm
,我在https://unix.stackexchange.com/a/491883/5132。它理解十六进制 RGB 表示法,甚至用作#
它的指示符。
用法示例:
$ setterm -7 --background '#FF0088' ;打印''; \ > setterm -7 --background '#61E931' ;打印''; \ > setterm -7 --background '#1256E2' ;打印''; \ > setterm -7 --背景默认值; 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
。 小吃指南。软件。
答案2
您可以使用以下命令更改终端的背景颜色:
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
在 KDE 终端程序 konsole 版本 21.12.3 (https://konsole.kde.org/),如果您将鼠标悬停在十六进制颜色代码上,它会以弹出方块的形式显示该颜色。