Command-Line

在終端中給出十六進制值時是否有顯示顏色的命令?

  • April 15, 2020

如何在終端中顯示顏色以處理十六進制顏色值?它可用於主題化、XResources 等。例如:

$ command '#FF0000'
// display a red square

我在 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 "};列印 "\n"' "$@"
}

另一種選擇:

使用我在https://unix.stackexchange.com/a/491883/5132setterm中提到的攜帶式。它理解十六進制 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. 小吃指南。軟體。

引用自:https://unix.stackexchange.com/questions/482755