当面の要点としては、Terminal.appでの色彩決定をすべてweb安全色に統一することです。そこで、3つのスクリプトを準備しました。始めに、それらの動作を示し、その後に、スクリプトを示します。
(1.1 wscListの結果)
昔懐かしの「とほほの色入門・色見本」http://www.tohoho-web.com/wwwcolor.htm の「Webセーフカラー(216色)」を参考にして、配色を作ってみました。その前にTerminalの16色、その後にグレイ・スケール6色を追加しました。Terminalの16色は必ずしも「Webセーフカラー(216色)」でなくとも表示されるようですが、今回はすべて「Webセーフカラー(216色)」で記述しました。
図1.1 wscListの結果
(1.2 wscInfoの結果)
実際の配色を決定するのに図1.1に(rgb)を付けたものを紙に印刷して使っていたのですが、使用しているプリンタの青・緑の近傍は画面に比べて暗い感じの為に、設定に使用できませんでした。
そこで、図1.1の画面で、これはと思った色のWebセーフカラー番号から、6進数の逆計算をして、(rgb)と色のサンプル出力を出せるようにしました。
図1.2 wscInfoの結果
(1.3 wscTerminalColors(黒い色)の結果)
取り敢えず、Terminalの16色を元に、バックグラウンド色・文字色の組み合わせを表示してみました。
なお、操作の便利の為に
#ターミナル色 #wsc 略称:フル・ネーム
0 16 K:Kuro
1 160 R:Red
2 34 G:Green
3 214 Y:Yellow
4 21 B:Blue
5 127 M:Magenta
6 45 C:Cyan
7 145 S:Silver
8 188 s:silver
9 196 r:red
10 46 g:green
11 226 y:yellow
12 39 b:blue
13 201 m:magenta
14 51 c:cyan
15 231 w:white
としました。
図1.3 wscTerminalColors(黒い色)の結果
(1.4 wscTerminalColors(明るい色)の結果)
問題点は
- • #12の明るい青のバックグラウンドカラーが図1.3と違う。
- #15と#16のバッククラウン色とが異なる。
これらは、terminfo(5)によって、動的に設定・起動をする必要があるかもしれない。取り敢えずは無視。
図1.4 wscTerminalColors(明るい色)の結果
(2.1 wscListのリスト)
#!/bin/zsh
# USAGE: % wscList↩
show_216c(){
j0=$((16))
echo -n " -----------"
echo " standard colors:(0~7) ----------------------------"
echo -n " 0 "
for (( j=0; j<=7; j++ )) do
printf "\e[1;38;5;15;48;5;%dm W \e[m" $j
printf "\e[1;38;5;0;48;5;%dm B \e[m" $j
echo -n " "
done
echo " 7"
echo -n " -----------"
echo " #High-intensity colors:(8~15) --------------------"
echo -n " 8 "
for (( j=8; j<=15; j++ )) do
printf "\e[1;38;5;15;48;5;%dm W \e[m" $j
printf "\e[1;38;5;0;48;5;%dm B \e[m" $j
echo -n " "
done
echo "15"
for (( z=0; z<=5; z++ )) do
# RED loop
j0=$(( 16+36*z ))
# echo " •j0=$j0, RED=$RED[$j0]"
echo -n " ----------"
printf " #color:(%3d~%3d) -------------------------- -------\n"\
$j0 $((j0+35))
# echo -n " ------ ------- #Color:RED,GREEN,BLUE "
# echo "-----------------------------------------"
for (( y=0; y<=5 ; y++ )); do
# GREEN loop
j1=$(( j0+6*y ))
printf " %3d " $j1
for (( x=0; x<=5 ; x++ )); do
# BLUE loop for Color Samples
j=$(( j1+x ))
printf "\e[1;38;5;15;48;5;%dm W \e[m" $j
printf "\e[1;38;5;0;48;5;%dm B \e[m" $j
echo -n " "
done
printf " %3d\n" $((j1+5))
#set -x
# for (( x=0; x<=5 ; x++ )); do
# # BLUE loop for #web-safe color, BLUE, GREEN
[[ $x -eq 0 ]] && echo -n " "
# j=$(( j1+x ))
# printf "%3d:%.2X%.2X%.2X " $j $RED[$j] $GREEN[$j] $BLUE[$j]
# echo -n " "
# done
# echo
done
done
#gray scale
#echo
echo -n " ---------"
echo " #gray background:(16 59 102 145 188 231)------------"
echo -n " "
for j in $gray_colors ; do
printf "\e[1;38;5;15;48;5;%dm W \e[m" $j
printf "\e[1;38;5;0;48;5;%dm B \e[m" $j
echo -n " "
done
echo
echo -n " "
for j in $gray_colors ; do
printf "\e[1;38;5;51;48;5;%dm Cyan \e[m" $j
echo -n " "
done
echo
echo -n " "
for j in $gray_colors ; do
printf "\e[1;38;5;201;48;5;%dm Magent \e[m" $j
echo -n " "
done
echo
echo -n " "
for j in $gray_colors ; do
printf "\e[1;38;5;226;48;5;%dm Yellow \e[m" $j
echo -n " "
done
echo
}
number_RGB(){
#set -x
n=16
for (( z=0; z<=5; z++ )) do
red=$(( z*51 ))
# echo "red=$red"
for (( y=0; y<=5 ; y++ )); do
green=$(( y*51 ))
for (( x=0; x<=5 ; x++ )); do
blue=$(( x*51 ))
#printf "%3d=(%3d,%3d,%3d) " $n $red $green $blue
RED[$n]=$red
GREEN[$n]=$green
BLUE[$n]=$blue
#printf "%3d=(%X%X%X) " $n $RED[$n] $GREEN[$n] $BLUE[$n]
n=$(( n+1 ))
done
# echo
done
done
}
########################### main ##############################
RED=()
GREEN=()
BLUE=()
#number_RGB
gray_colors=(16 59 102 145 188 231)
show_216c
(2.2 wscInfoのリスト)
#!/bin/zsh
# USAGE: % wscInfo↩
# enter WebSafty-color #(16~231) ? 16 59 102 145 188 231↩ # gray scale
# enter WebSafty-color #(16~231) ? 21 33 39↩ # blue
# enter WebSafty-color #(16~231) ? ↩ # end
wsc2rgb(){
#set -x
#wsc=16+Red*36+Green*6+Blue
wsc=$(($1))
nnn=$((wsc-16))
blue=$((nnn%6))
nn=$((nnn-blue))
green=$(((nn/6)%6))
red=$(((nnn/36)%6))
wscCheck=$((red*36+green*6+blue+16))
blueV=$((blue*51))
greenV=$((green*51))
redV=$((red*51))
}
#====================================================
while true; do
echo -n "enter WebSafty-color #(16~231) ? "
read nmbers
#set -x
[[ $#nmbers -eq 0 ]] && exit
# echo "$nmbers"
numbers=( $(echo $nmbers) )
j=$((0))
# 1 33 0 2 5 0 102 255
echo " # wsc r g b red green blue"
for nm in $numbers; do
[[ $nm -lt 0 || $nm -gt 231 ]] && continue
wsc2rgb $nm
#echo "$nm $red $green $blue $redV $greenV $blueV"
printf " %2d %3d %d %d %d %3d %3d %3d"\
$j $nm $red $green $blue $redV $greenV $blueV
j=$((j+1))
printf " \e[1;38;5;15;48;5;%dm %.3d \e[m" $nm $nm
printf "\e[1;38;5;0;48;5;%dm %.3d \e[m\n" $nm $nm
done
done
(2.3 wsc4TerminalColorsのリスト)
#!/bin/zsh
wsc2rgb(){
#set -x
#wsc=16+Red*36+Green*6+Blue
wsc=$(($1))
nnn=$((wsc-16))
blue=$((nnn%6))
nn=$((nnn-blue))
green=$(((nn/6)%6))
red=$(((nnn/36)%6))
wscCheck=$((red*36+green*6+blue+16))
blueV=$((blue*3))
greenV=$((green*3))
redV=$((red*3))
}
color_Sets(){
# 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
cNum=( 16 160 34 214 21 127 45 145 188 196 46 226 39 201 51 231 -1)
shortName=( K R G Y B M C S s r g y b m c w n )
fullName=( Kuro Red Green Yellow Blue Magenta Cyan Silver )
fullName=($fullName silver red green yellow blue magenta cyan white normal)
for (( j=0; j<=16; j++ )) do
k=$((j+1))
wsc2rgb $cNum[$k]
R[$k]=$red
G[$k]=$green
B[$k]=$blue
R3[$k]=$redV
G3[$k]=$greenV
B3[$k]=$blueV
done
}
#========================== main ==========================
#set -x
color_Sets
echo -n "-- #Color --- Name 6base Hex "
echo "Combination of Background and Foreground Colors"
echo -n "#terminal #wsc abb.:full rgb rgb "
echo "Abbreviation of Background|Letter"
echo -n " -- --- --------- --- --- -----------------------------"
echo '------------------------------------'
for (( j=0; j<=16; j++ )) do
k=$((j+1))
if [[ $j -le 15 ]] then
printf " %2d %3d %s:%-8s %1d%1d%1d %1x%1x%1x "\
$j $cNum[$k] $shortName[$k] $fullName[$k] $R[$k] $G[$k] $B[$k]\
$R3[$k] $G3[$k] $B3[$k]
else
printf " %2d ... %s:%-8s ... ... "\
$j $shortName[$k] $fullName[$k]
fi
for (( l=0; l<=15; l++ )) do
m=$((l+1))
if [[ $j -le 15 ]] then
printf "\e[1;38;5;%d;48;5;%dm %s|%s\e[m"\
$l $j $shortName[$k] $shortName[$m]
else
printf "\e[38;5;%dm %s|%s\e[m"\
$l $shortName[$k] $shortName[$m]
fi
[[ $l -eq 15 ]] && printf "\e[48;5;%dm \e[m" $j
done
echo
done
echo -n " -- --- --------- --- --- -----------------------"
echo '------------------------------------------'
以上