Bash
tput setaf 顏色表?如何確定顏色程式碼?
我正在為我的終端著色
PS1
。我正在使用
tput
;設置顏色變數 例如,這裡是紫色的:PURPLE=$(tput setaf 125)
問題:
如何找到
125
其他顏色的顏色程式碼(例如 )?某處是否有顏色表指南/備忘單?
我只是不確定是什麼
125
……有什麼方法可以將十六進制顏色轉換為setaf
可以使用的數字嗎?
tput 可用的顏色計數由 給出
tput colors
。要查看基本的 8 種顏色(
setf
在 urxvt 終端和setaf
xterm 終端中使用):$ printf '\e[%sm▒' {30..37} 0; echo ### foreground $ printf '\e[%sm ' {40..47} 0; echo ### background
通常這樣命名:
Color #define Value RGB black COLOR_BLACK 0 0, 0, 0 red COLOR_RED 1 max,0,0 green COLOR_GREEN 2 0,max,0 yellow COLOR_YELLOW 3 max,max,0 blue COLOR_BLUE 4 0,0,max magenta COLOR_MAGENTA 5 max,0,max cyan COLOR_CYAN 6 0,max,max white COLOR_WHITE 7 max,max,max
要查看擴展的 256 種顏色(
setaf
在 urxvt 中使用):$ printf '\e[48;5;%dm ' {0..255}; printf '\e[0m \n'
如果你想要數字和有序的輸出:
#!/bin/bash color(){ for c; do printf '\e[48;5;%dm%03d' $c $c done printf '\e[0m \n' } IFS=$' \t\n' color {0..15} for ((i=0;i<6;i++)); do color $(seq $((i*36+16)) $((i*36+51))) done color {232..255}
1600 萬種顏色需要相當多的程式碼(有些控制台無法顯示這一點)。
基本情況是:
fb=3;r=255;g=1;b=1;printf '\e[0;%s8;2;%s;%s;%sm▒▒▒ ' "$fb" "$r" "$g" "$b"
fb
是front/back
或3/4
。一個簡單的測試你的控制台顯示這麼多顏色的能力是:
for r in {200..255..5}; do fb=4;g=1;b=1;printf '\e[0;%s8;2;%s;%s;%sm ' "$fb" "$r" "$g" "$b"; done; echo
它將呈現一條紅線,從左到右的色調變化非常小。如果這個微小的變化是可見的,那麼您的控制台就可以顯示 1600 萬種顏色。
對於 RGB(紅、綠、藍),每個
r
、g
和b
都是 0 到 255 之間的值。如果您的控制台類型支持此功能,則此程式碼將創建一個顏色表:
mode2header(){ #### For 16 Million colors use \e[0;38;2;R;G;Bm each RGB is {0..255} printf '\e[mR\n' # reset the colors. printf '\n\e[m%59s\n' "Some samples of colors for r;g;b. Each one may be 000..255" printf '\e[m%59s\n' "for the ansi option: \e[0;38;2;r;g;bm or \e[0;48;2;r;g;bm :" } mode2colors(){ # foreground or background (only 3 or 4 are accepted) local fb="$1" [[ $fb != 3 ]] && fb=4 local samples=(0 63 127 191 255) for r in "${samples[@]}"; do for g in "${samples[@]}"; do for b in "${samples[@]}"; do printf '\e[0;%s8;2;%s;%s;%sm%03d;%03d;%03d ' "$fb" "$r" "$g" "$b" "$r" "$g" "$b" done; printf '\e[m\n' done; printf '\e[m' done; printf '\e[mReset\n' } mode2header mode2colors 3 mode2colors 4
以索引為標籤的範例背景顏色圖表
要將十六進制顏色值轉換為(最近的)0-255 顏色索引:
fromhex(){ hex=${1#"#"} r=$(printf '0x%0.2s' "$hex") g=$(printf '0x%0.2s' ${hex#??}) b=$(printf '0x%0.2s' ${hex#????}) printf '%03d' "$(( (r<75?0:(r-35)/40)*6*6 + (g<75?0:(g-35)/40)*6 + (b<75?0:(b-35)/40) + 16 ))" }
將其用作:
$ fromhex 00fc7b 048 $ fromhex #00fc7b 048
要查找HTML 顏色格式中使用的顏色編號:
#!/bin/dash tohex(){ dec=$(($1%256)) ### input must be a number in range 0-255. if [ "$dec" -lt "16" ]; then bas=$(( dec%16 )) mul=128 [ "$bas" -eq "7" ] && mul=192 [ "$bas" -eq "8" ] && bas=7 [ "$bas" -gt "8" ] && mul=255 a="$(( (bas&1) *mul ))" b="$(( ((bas&2)>>1)*mul ))" c="$(( ((bas&4)>>2)*mul ))" printf 'dec= %3s basic= #%02x%02x%02x\n' "$dec" "$a" "$b" "$c" elif [ "$dec" -gt 15 ] && [ "$dec" -lt 232 ]; then b=$(( (dec-16)%6 )); b=$(( b==0?0: b*40 + 55 )) g=$(( (dec-16)/6%6)); g=$(( g==0?0: g*40 + 55 )) r=$(( (dec-16)/36 )); r=$(( r==0?0: r*40 + 55 )) printf 'dec= %3s color= #%02x%02x%02x\n' "$dec" "$r" "$g" "$b" else gray=$(( (dec-232)*10+8 )) printf 'dec= %3s gray= #%02x%02x%02x\n' "$dec" "$gray" "$gray" "$gray" fi } for i in $(seq 0 255); do tohex ${i} done
將其用作(“基本”是前 16 種顏色,“顏色”是主要組,“灰色”是最後一個灰色):
$ tohex 125 ### A number in range 0-255 dec= 125 color= #af005f $ tohex 6 dec= 6 basic= #008080 $ tohex 235 dec= 235 gray= #262626