ANSI エスケープ シーケンス カラーでおあそび


ターミナルに ANSI エスケープ シーケンス カラー (4 ビット) の一覧表を出力

ここの図の内容の出力をさせるスクリプトくらいならわたしでもかけそうだとおもいました。

Awk 版

とりあえず awk で1

ansi_4-bit_colors.awk
#! /usr/bin/awk -f

BEGIN {
    HR = "---------------------------------------------------------------------"
    CSI = "\033["  # Control Sequence Introducer; ESC == \033
    print "Background | Foreground colors"
    print HR
    nattrs = split(",1;", attrs, ",")
    for (bc = 40; bc <= 47; bc++) {
        for (i = 1; i <= nattrs; i++) {
            sgr = bc "m"  # Select Graphic Rendition parameter
            printf(" ESC[" sgr "   | " CSI sgr)
            for (fc = 30; fc <= 37; fc++) {
                sgr = attrs[i] fc "m"
                printf(CSI sgr " %-6s", "[" sgr)
            }
            print CSI "0m"  # Reset
        }
        print HR
    }
}

Bash 版

いちおう Bash でも。

ansi_4-bit_colors.sh
#! /bin/bash

HR='---------------------------------------------------------------------'
CSI='\e['
echo 'Background | Foreground colors'
echo $HR
for bc in {40..47}
do
    for attr in '' '1;'
    do
        sgr="${bc}m"
        printf " ESC[${sgr}   | ${CSI}${sgr}"
        for fc in {30..37}
        do
            sgr="${attr}${fc}m"
            printf "${CSI}${sgr} %-6s" "[${sgr}"
        done
        echo -e "${CSI}0m"
    done
    echo $HR
done

8 ビット カラー

ここの表の 16 ~ 231 の部分を Bash のワン ライナーで。

Bash
seq 16 231 | while read; do printf "\e[48;5;${REPLY}m\e[$((37 - 7 * (($REPLY - 16) % 36 / 18)))m%4s" $REPLY; ((($REPLY - 15) % 36)) || echo -e '\e[m'; done

参考文献


  1. プログラマーでないわたしがそこそこ自信があるのは awk と Bash だけです。 (PowerShell はすこしわかってきましたが、学習曲線は awk と Bash よりきついとおもいます。)