-
Notifications
You must be signed in to change notification settings - Fork 1
/
terminal_256colors.sh
78 lines (60 loc) · 1.52 KB
/
terminal_256colors.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
#!/usr/bin/env bash
# https://gist.github.com/ivanbrennan/8ce10a851851e5f04728d8da900ef1c5
# https://gist.github.com/mgedmin/2762225
PADDING='Padding'
main() {
local xterm_start=0 \
xterm_width=8 \
xterm_height=2
local cube_start=$((xterm_start + xterm_width * xterm_height)) \
cube_width=6 \
cube_height=$((6 * 6))
local greys_start=$((cube_start + cube_width * cube_height)) \
greys_width=8 \
greys_height=3
color_block $xterm_start $xterm_width $xterm_height
color_block $cube_start $cube_width $cube_height use_padding
color_block $greys_start $greys_width $greys_height
echo
}
color_block() {
local start=$1 width=$2 height=$3 use_padding=$4
local max s color_nums colors
max=$((start + width * height - 1))
echo
for s in $(seq "$start" "$width" "$max"); do
color_nums=$(seq "$s" $((s + width - 1)))
colors="${use_padding:+$PADDING }${color_nums}${use_padding:+ $PADDING}"
printf '%s%s %s%s\n' \
"$(fg_bars "$colors")" "$ansi_reset" \
"$(bg_bars "$colors")" "$ansi_reset"
done
}
fg_bars() {
for color in "$@"; do
color_bar ansi_fg "$color" ''
done
}
bg_bars() {
for color in "$@"; do
color_bar ansi_bg "$color" ' '
done
}
color_bar() {
local ansi=$1 color=$2 trail=$3
if [ "$color" == $PADDING ]; then
printf '%s %s' "$ansi_reset" "$trail"
else
local color_seq
color_seq=$("$ansi" "$color")
printf '%s %03d%s' "$color_seq" "$color" "$trail"
fi
}
ansi_reset=$'\033[0m'
ansi_fg() {
printf '\033[38;5;%dm' "$1"
}
ansi_bg() {
printf '\033[48;5;%dm' "$1"
}
main