Ant*_*ack 3 command-line colors terminal
如何在终端中显示颜色以处理十六进制颜色值?它对于主题化、XResources 等很有用。例如:
$ command '#FF0000'
// display a red square
Run Code Online (Sandbox Code Playgroud)
我在 manjaro 中使用 urxvt、i3wm。
显示颜色(){ 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"' "$@" }
使用我setterm
在https://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 %
setterm
. 小吃指南。软件。