aboutsummaryrefslogtreecommitdiff
path: root/.scripts/colors.sh
blob: fc1c10c566346b1f771d8ade9d23df8d4cbf3433 (plain)
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
colors=$@
for (( n=0; n < $colors; n++ )) do
    printf " [%d] $(tput setaf $n)%s$(tput sgr0)" $n "Hello World!
"
done
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=$($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