2015-05-09

zsh: 彩色するecho関数群の制作と評価

私は前の記事で、Terminalを黒っぽい色で運用するという経験をしました。 明るい画面が眩しい者にとって、其の経験は素晴らしいものでした。
でも、バックグラウンド色を暗くするだけでは、見やすくならないとも感じました。そこで『文字が見やすくなるような輝度と彩度の探索』を行いました。其の結果を図1に示します。

図1.  テーブル1: cehelp,  テーブル2: fb2z_302.


図1-テーブル 1は今回作成した「彩色したエスケープ・シークエンスを用いたecho関数群」の出力(カラー調整後)です。この時、Terminal.appでのPreferenceで全ての項目を出力を見ながら調節したRGB値を下表3に示します。図1- 表1 myTerminalColors2 「テーブル 2」は「From Bash to Z Shell, p302.」の連想配列の説明に出ていたスクリプトの出力です。どうやら、カラー名に基づく色指定はターミナルの調節とは連動していないようです。

 「テーブル 1, 2」は、.zshrc」の中で直列に置かれた関数から生成されました。言い換えれば、同一のターミナルの色設定でを反映しています。しかし、文字色におおきな差が出ています;

  • 文字の輝度は、「テーブル 1」で圧倒的に高くなった。その為に、明るいバックグラウンドの時はフォント・サイズが「18~22pt」だったのが、暗いバックグラウンドでは「16pt」で運用できるようになりました。
    • 眩しさは明らかに軽減されました。当然、画面中のデータ量が増大した。
    • あたかも、文字が浮かび上がって、目に飛び込んでくるような感触です。 
  • 文字の彩度は「赤とマゼンタの対」「緑とシアンの対」が識別をしやすくなるように調節した。
    • 「赤-->橙」「緑-->明るい緑」「黄-->純色の黄」となった。
    • 多色で切り分た多項目データで、項目把握が明確にできるようになった。 
  • これらのRGB調節の時に、「テーブル 1,2」の振る舞いの観察から、テーブル2はターミナルの調節に依存しないように見えた。其の理由は未だ判らない。
 表3 Terminal.appでのカラー設定結果


-----» myTerminalColors2 «-----
                                       Active Win.  Inactive Win.
 #     setting color    R    G    B    Opacity Blur Opacity Blur
-----------------------------------------------------------------
01        Background   015  009  024       90  100      27   23
02              Text   230  230  230 
03          BoldText   255  255  255 
04         Selection   220  140  033 
--------------------------------------
05          Black(0)   000  000  000 
06    brightBlack(8)   102  102  102 
   - - - - - - - - - - - - - - - - - -
07            Red(1)   153  000  000 
08      brightRed(9)   229  000  000 
   - - - - - - - - - - - - - - - - - -
09          Green(2)   000  166  000 
10    brigtGreen(10)   000  217  000 
   - - - - - - - - - - - - - - - - - -
11         Yellow(3)   153  153  000 
12   brigtYellow(11)   229  229  000 
   - - - - - - - - - - - - - - - - - -
13           Blue(4)   000  000  178 
14     brigtBlue(12)   000  000  255 
   - - - - - - - - - - - - - - - - - -
15        Magenta(5)   199  000  209 
16  brigtMagenta(13)   229  000  229 
   - - - - - - - - - - - - - - - - - -
17           Cyan(6)   119  194  203 
18     brigtCyan(14)   087  239  255 
   - - - - - - - - - - - - - - - - - -
19          White(7)   191  191  191 
20    brigtWhite(15)   229  229  229 
--------------------------------------
21            Cursor   255  000  255 
--------------------------------------


結論

  • エスケープ・シーケンスのカラー・サンプルを見やすく調節出来た。
  • この結果、高齢者の画面操作がとてもリラックス出来るようになった。 
  • 「彩色したエスケープ・シークエンスを用いたecho関数群」は情報を見やすく表示するのに有用だった。 
  •  他方、カラー名とエスケープ・シークエンスは連携していない。  

 図1でのスクリプトを示します。  

スクリプト1. cehelp

#!/bin/zsh 

# ColoringEchoes
#
# Usage: ColoringEchoes⏎


# 2015-04-12(日) 13:45:03 
# 2015-04-27(月) 09:22:58 BoldColors: 全ての色の組み合わせ、エスケープ化。
# 2015-05-08(金) 11:11:26 --> ColoringEchoes

#  色文字、背景はディフォールト:バックグラウンド色
# Lightface
ek_(){echo -n "\e[30m${@}\e[m"}
er_(){echo -n "\e[31m${@}\e[m"}
eg_(){echo -n "\e[32m${@}\e[m"}
ey_(){echo -n "\e[33m${@}\e[m"}
eb_(){echo -n "\e[34m${@}\e[m"}
em_(){echo -n "\e[35m${@}\e[m"}
ec_(){echo -n "\e[36m${@}\e[m"}
ew_(){echo -n "\e[37m${@}\e[m"}
et_(){echo -n "\e[38m${@}\e[m"}
# Boldface
bk_(){echo -n "\e[30;1m${@}\e[m"}
br_(){echo -n "\e[31;1m${@}\e[m"}
bg_(){echo -n "\e[32;1m${@}\e[m"}
by_(){echo -n "\e[33;1m${@}\e[m"}
bb_(){echo -n "\e[34;1m${@}\e[m"}
bm_(){echo -n "\e[35;1m${@}\e[m"}
bc_(){echo -n "\e[36;1m${@}\e[m"}
bw_(){echo -n "\e[37;1m${@}\e[m"}
bt_(){echo -n "\e[38;1m${@}\e[m"}

#  色文字、背景は黒色
bkk(){echo -n "\e[1;30;40m${@}\e[m"}
brk(){echo -n "\e[1;31;40m${@}\e[m"}
bgk(){echo -n "\e[1;32;40m${@}\e[m"}
byk(){echo -n "\e[1;33;40m${@}\e[m"}
bbk(){echo -n "\e[1;34;40m${@}\e[m"}
bmk(){echo -n "\e[1;35;40m${@}\e[m"}
bck(){echo -n "\e[1;36;40m${@}\e[m"}
bwk(){echo -n "\e[1;37;40m${@}\e[m"}
btk(){echo -n "\e[1;38;40m${@}\e[m"}

#  色文字、背景は赤色
bkr(){echo -n "\e[1;30;41m${@}\e[m"}
brr(){echo -n "\e[1;31;41m${@}\e[m"}
bgr(){echo -n "\e[1;32;41m${@}\e[m"}
byr(){echo -n "\e[1;33;41m${@}\e[m"}
bbr(){echo -n "\e[1;34;41m${@}\e[m"}
bmr(){echo -n "\e[1;35;41m${@}\e[m"}
bcr(){echo -n "\e[1;36;41m${@}\e[m"}
bwr(){echo -n "\e[1;37;41m${@}\e[m"}
btr(){echo -n "\e[1;38;41m${@}\e[m"}

#  色文字、背景は緑色
bkg(){echo -n "\e[1;30;42m${@}\e[m"}
brg(){echo -n "\e[1;31;42m${@}\e[m"}
bgg(){echo -n "\e[1;32;42m${@}\e[m"}
byg(){echo -n "\e[1;33;42m${@}\e[m"}
bbg(){echo -n "\e[1;34;42m${@}\e[m"}
bmg(){echo -n "\e[1;35;42m${@}\e[m"}
bcg(){echo -n "\e[1;36;42m${@}\e[m"}
bwg(){echo -n "\e[1;37;42m${@}\e[m"}
btg(){echo -n "\e[1;38;42m${@}\e[m"}
bug(){echo -n "\e[1;39;42m${@}\e[m"}


#  色文字、背景は黄色
bky(){echo -n "\e[1;30;43m${@}\e[m"}
bry(){echo -n "\e[1;31;43m${@}\e[m"}
bgy(){echo -n "\e[1;32;43m${@}\e[m"}
byy(){echo -n "\e[1;33;43m${@}\e[m"}
bby(){echo -n "\e[1;34;43m${@}\e[m"}
bmy(){echo -n "\e[1;35;43m${@}\e[m"}
bcy(){echo -n "\e[1;36;43m${@}\e[m"}
bwy(){echo -n "\e[1;37;43m${@}\e[m"}
bty(){echo -n "\e[1;38;43m${@}\e[m"}
buy(){echo -n "\e[1;39;43m${@}\e[m"}

#  色文字、背景は青色
bkb(){echo -n "\e[1;30;1;44m${@}\e[m"}
brb(){echo -n "\e[1;31;1;44m${@}\e[m"}
bgb(){echo -n "\e[1;32;1;44m${@}\e[m"}
byb(){echo -n "\e[1;33;1;44m${@}\e[m"}
bbb(){echo -n "\e[1;34;1;44m${@}\e[m"}
bmb(){echo -n "\e[1;35;1;44m${@}\e[m"}
bcb(){echo -n "\e[1;36;1;44m${@}\e[m"}
bwb(){echo -n "\e[1;37;1;44m${@}\e[m"}
btb(){echo -n "\e[1;38;1;44m${@}\e[m"}
bub(){echo -n "\e[1;39;1;44m${@}\e[m"}

#  色文字、背景はマゼンタ色
bkm(){echo -n "\e[1;30;45m${@}\e[m"}
brm(){echo -n "\e[1;31;45m${@}\e[m"}
bgm(){echo -n "\e[1;32;45m${@}\e[m"}
bym(){echo -n "\e[1;33;45m${@}\e[m"}
bbm(){echo -n "\e[1;34;45m${@}\e[m"}
bmm(){echo -n "\e[1;35;45m${@}\e[m"}
bcm(){echo -n "\e[1;36;45m${@}\e[m"}
bwm(){echo -n "\e[1;37;45m${@}\e[m"}
btm(){echo -n "\e[1;38;45m${@}\e[m"}

#  色文字、背景はシアン色
bkc(){echo -n "\e[1;30;46m${@}\e[m"}
brc(){echo -n "\e[1;31;46m${@}\e[m"}
bgc(){echo -n "\e[1;32;46m${@}\e[m"}
byc(){echo -n "\e[1;33;46m${@}\e[m"}
bbc(){echo -n "\e[1;34;46m${@}\e[m"}
bmc(){echo -n "\e[1;35;46m${@}\e[m"}
bcc(){echo -n "\e[1;36;46m${@}\e[m"}
bwc(){echo -n "\e[1;37;46m${@}\e[m"}
btc(){echo -n "\e[1;38;46m${@}\e[m"}
buc(){echo -n "\e[1;39;46m${@}\e[m"}

#  色文字、背景は白(灰)
bkw(){echo -n "\e[1;30;47m${@}\e[m"}
brw(){echo -n "\e[1;31;47m${@}\e[m"}
bgw(){echo -n "\e[1;32;47m${@}\e[m"}
byw(){echo -n "\e[1;33;47m${@}\e[m"}
bbw(){echo -n "\e[1;34;47m${@}\e[m"}
bmw(){echo -n "\e[1;35;47m${@}\e[m"}
bcw(){echo -n "\e[1;36;47m${@}\e[m"}
bww(){echo -n "\e[1;37;47m${@}\e[m"}
btw(){echo -n "\e[1;38;47m${@}\e[m"}

# 色文字はdefault色?、背景は文字色の反転。
b_k(){echo -n "\e[1;7;30m${@}\e[0m"}
b_r(){echo -n "\e[1;7;31m${@}\e[0m"}
b_g(){echo -n "\e[1;7;32m${@}\e[0m"}
b_y(){echo -n "\e[1;7;33m${@}\e[0m"}
b_b(){echo -n "\e[1;7;34m${@}\e[0m"}
b_m(){echo -n "\e[1;7;35m${@}\e[0m"}
b_c(){echo -n "\e[1;7;36m${@}\e[0m"}
b_w(){echo -n "\e[1;7;37m${@}\e[0m"}
b_t(){echo -n "\e[1;7;38m${@}\e[0m"}

# 改行付き: e_n, b_n: 
e_n(){echo "\e[38m${@}\e[m"}  # Ligtface with white and \n: new-line.
b_n(){echo "\e[1;38m${@}\e[m"}  # Boldface with white and \n: new-line.


# old representation by using colors
#eyk(){echo -n "$fg_bold[yellow]$bg_bold[black]${@}$reset_color"}
#eky(){echo -n "$bg_bold[yellow]$fg[black]${@}$reset_color"}
#ecb(){echo -n "$fg_bold[cyan]$bg_bold[blue]${@}$reset_color"}
#ebc(){echo -n "$bg_bold[cyan]$fg[blue]${@}$reset_color"}
#emk(){echo -n "$fg_bold[magenta]$bg_bold[black]${@}$reset_color"}
#ekm(){echo -n "$bg_bold[magenta]$fg[black]${@}$reset_color"}
#eck(){echo -n "$fg_bold[cyan]$bg_bold[black]${@}$reset_color"}
#ekc(){echo -n "$bg_bold[cyan]$fg[black]${@}$reset_color"}



cehelp(){ #ColoringEchoesHelp
btw "»»» Table 1: $(basename $0) «««";e_n 
 ###bw_ '2015-05-08(金) 18:59:11 ';e_n
ew_ "#  ";bt_ '• ';ew_ "ColoringEchoes  "; br_ "without ⏎(return).";e_n
ew_ "#  ";bt_ '• ';br_ Not ;ew_ " require 'autoload -U colors && colors -u'."; e_n
ew_ "#  ";bt_ '• ';bg_ "Boldfaces"; ew_ ": 10rows for __,0a..7h,rv; ";bg_ Lightfaces; ew_ ": 1row. ";e_n
 echo '#  -----------------------------------------------------------------'
 echo '#   row\\col  0a   1b   2c   3d   4e   5f   6g   7h   8x    col/row'
 echo '#  -----------------------------------------------------------------'
 et_ '#  __  ';bk_ ' bk_ ';br_ ' br_ ';bg_ ' bg_ '; by_ ' by_ ';\
         bb_ ' bb_ ';bm_ ' bm_ ';bc_ ' bc_ '; bw_ ' bw_ '; bt_ ' bt_ ';\
         e_n '  __'

 et_ '#  0a  ';bkk ' bkk ';brk ' brk ';bgk ' bgk '; byk ' byk ';\
         bbk ' bbk ';bmk ' bmk ';bck ' bck '; bwk ' bwk '; btk ' btk ';\
         et_ '  0a';e_n 

 et_ '#  1b  ';bkr ' bkr ';brr ' brr ';bgr ' bgr '; byr ' byr ';\
         bbr ' bbr ';bmr ' bmr ';bcr ' bcr '; bwr ' bwr '; btr ' btr ';\
         et_ '  1b';e_n 

 et_ '#  2c  ';bkg ' bkg ';brg ' brg ';bgg ' bgg '; byg ' byg ';\
         bbg ' bbg ';bmg ' bmg ';bcg ' bcg '; bwg ' bwg '; btg ' btg ';\
         et_ '  2c';e_n 

 et_ '#  3d  ';bky ' bky ';bry ' bry ';bgy ' bgy '; byy ' byy ';\
         bby ' bby ';bmy ' bmy ';bcy ' bcy '; bwy ' bwy '; bty ' btr ';\
         et_ '  3d';e_n 

 et_ '#  4e  ';bkb ' bkb ';brb ' brb ';bgb ' bgb '; byb ' byb ';\
         bbb ' bbb ';bmb ' bmb ';bcb ' bcb '; bwb ' bwb '; btb ' btb ';\
         et_ '  4e';e_n 

 et_ '#  5f  ';bkm ' bkm ';brm ' brm ';bgm ' bgm '; bym ' bym ';\
         bbm ' bbm ';bmm ' bmm ';bcm ' bcm '; bwm ' bwm '; btm ' btm ';\
         et_ '  5f';e_n 

 et_ '#  6g  ';bkc ' bkr ';brc ' brr ';bgc ' bgc '; byc ' byc ';\
         bbc ' bbr ';bmc ' bmr ';bcc ' bcc '; bwc ' bwc '; btc ' btc ';\
         et_ '  6g';e_n 
         
 et_ '#  7h  ';bkw ' bkw ';brw ' brw ';bgw ' bgw '; byw ' byw ';\
         bbw ' bbw ';bmw ' bmw ';bcw ' bcw '; bww ' bww '; btw ' btw ';\
         et_ '  7h';e_n 

 et_ '#  rv  ';b_k ' b_k ';b_r ' b_r ';b_g ' b_g '; b_y ' b_y ';\
         b_b ' b_b ';b_m ' b_m ';b_c ' b_c '; b_w ' b_w '; b_t ' b_t ';\
         et_ '  rv';e_n 

 et_ '#    light  ';
         ek_ ' ek_ ';er_ ' er_ ';eg_ ' eg_ '; ey_ ' ey_ ';\
         eb_ ' eb_ ';em_ ' em_ ';ec_ ' ec_ '; ew_ ' ew_ '; et_ ' et_ ';\
         et_ ' lightfaces';e_n 
 echo '#  -----------------------------------------------------------------'
 ew_ '#  • ';ew_ "Commands "; br_ "with ⏎(return):";e_n ' e_n, b_n, echo and samples.'
 echo '#  -----------------------------------------------------------------'
 
}


# 通常文字:e_m:改行無し, e_n: 改行付き
#e_m(){echo -n "\e[38m${@}\e[m"}  # Ligtface with white == et_
#b_m(){echo -n "\e[1;38m${@}\e[m"} # Boldface with white == bt_
e_n(){echo "\e[38m${@}\e[m"}  # Ligtface with white and \n: new-line.
b_n(){echo "\e[1;38m${@}\e[m"}  # Boldface with white and \n: new-line.


# old representation by using colors
#eyk(){echo -n "$fg_bold[yellow]$bg_bold[black]${@}$reset_color"}
#eky(){echo -n "$bg_bold[yellow]$fg[black]${@}$reset_color"}
#ecb(){echo -n "$fg_bold[cyan]$bg_bold[blue]${@}$reset_color"}
#ebc(){echo -n "$bg_bold[cyan]$fg[blue]${@}$reset_color"}
#emk(){echo -n "$fg_bold[magenta]$bg_bold[black]${@}$reset_color"}
#ekm(){echo -n "$bg_bold[magenta]$fg[black]${@}$reset_color"}
#eck(){echo -n "$fg_bold[cyan]$bg_bold[black]${@}$reset_color"}
#ekc(){echo -n "$bg_bold[cyan]$fg[black]${@}$reset_color"}

#set -x
#samples
cehelp
fb2z_302


スクリプト2. fb2z_p 

#!/bin/zsh 

# usage:
# % fb2z_302⏎

echo
#source $HOME/zsh/functions/ColoringEchoes
autoload ColoringEchoes
#
btw "»»» Table 2: $(basename $0) «««";e_n
ew_ '   • reference: "From Bash to Z Shell", p302.';e_n
ew_ '   • ';br_ require;ew_ ': "autoload -U colors && colors -u"'; e_n

autoload -U colors && colors -u

for bgc in ${(ko)bg}; do
 print -n "$bg[$bgc]"
 for fgc in ${(ko)fg}; do
  printf '%s%-8s' $fg[$fgc] $fgc
 done
 print $rest_color
done
e_n
 ____
この記事の履歴
  1. 開始 2015-05-09(土) 00:53:25 
  2. 修正 2015-05-09(土) 08:52:27 表示データのフォーマットを正しくした。

0 件のコメント:

コメントを投稿

注目の投稿

Terminalでの、なんちゃってViモドキ

近頃、ようやくKarabiner-Elementsに慣れてきたので、 Terminalで動作する「擬似Vi-Mode」を作って見たので、ご紹介します。 『概要』 「擬似Vi-Mode」の所以は、方向キー「←↓↑→」を通常の「hjkl」ではなくて「jkil」としました。これ...