替代:

替代:

如何在终端中显示颜色以处理十六进制颜色值?它对于主题、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/),如果您将鼠标悬停在十六进制颜色代码上,它会以弹出方块的形式显示该颜色。

相关内容