6a204512 |
# Following Vim's dark/light naming convention.
COLOR_DARKBLACK=0
COLOR_DARKRED=1
COLOR_DARKGREEN=2
COLOR_DARKYELLOW=3
COLOR_DARKBLUE=4
COLOR_DARKMAGENTA=5
COLOR_DARKCYAN=6
COLOR_DARKWHITE=7
COLOR_LIGHTBLACK=8
COLOR_LIGHTRED=9
COLOR_LIGHTGREEN=10
COLOR_LIGHTYELLOW=11
COLOR_LIGHTBLUE=12
COLOR_LIGHTMAGENTA=13
COLOR_LIGHTCYAN=14
COLOR_LIGHTWHITE=15
# Default to light.
COLOR_BLACK="$COLORS_LIGHTBLACK"
COLOR_RED="$COLORS_LIGHTRED"
COLOR_GREEN="$COLORS_LIGHTGREEN"
COLOR_YELLOW="$COLORS_LIGHTYELLOW"
COLOR_BLUE="$COLORS_LIGHTBLUE"
COLOR_MAGENTA="$COLORS_LIGHTMAGENTA"
COLOR_CYAN="$COLORS_LIGHTCYAN"
COLOR_WHITE="$COLORS_LIGHTWHITE"
__color_enabled="$(command -v tput)"
__color_count="$([ "$__color_enabled" ] && tput colors || echo 0)"
__color_test_put()
{
[ "$__color_enabled" ] || return 0
for __color
do
if [ $__color_count -lt 16 ] && [ $__color -ge 8 ]
then
__color=$((__color - 8))
tput bold
fi
tput setaf "$__color"
printf '%s' '██'
tput sgr0
done
}
__color_test()
{
__color_test_put 0
__color_test_put $(seq 1 6)
__color_test_put 7
printf '\n'
__color_test_put 8
__color_test_put $(seq 9 14)
__color_test_put 15
printf '\n'
}
__color_test1()
{
__color_test_put 0
printf '\n'
__color_test_put 8
printf '\n'
__color_test_put 7
__color_test_put $(seq 1 6)
printf '\n'
__color_test_put 15
__color_test_put $(seq 9 14)
printf '\n'
}
__color_test2()
{
__color_test_put 0
printf '\n'
__color_test_put 8
__color_test_put $(seq 1 6)
printf '\n'
__color_test_put 7
printf '\n'
__color_test_put 15
__color_test_put $(seq 9 14)
printf '\n'
}
__color_format()
{
for __color
do
# Same as `ceil(__color/0xff*1000)`.
printf '%s\n' "$(((__color * 1000 + 0xfe) / 0xff))"
done
}
# `terminfo` does not define capabilities for setting the default foreground
# and background colors, so if the terminal supports at least 16 colors we use
# OSC 10/11 directly and hope for the best. This causes `tmux` to explicitly
# render the background color, which causes issues with transparency. This also
# causes Vim's `:terminal` to interpret the escape character as an escape key
# press which puts readline in vi command mode. Therefore we only do this if
# we're a login shell.
__color_set_fg()
{
[ -z "$TMUX" ] || return 0
[ -z "$VIM" ] || return 0
# [ "$__color_count" -ge 16 ] || return 0
# case "$0" in
# -*) break ;;
# *) return 0 ;;
# esac
printf '\33]10;rgb:%02x/%02x/%02x\33\\' "$@"
}
__color_set_bg()
{
[ -z "$TMUX" ] || return 0
[ -z "$VIM" ] || return 0
# [ "$__color_count" -ge 16 ] || return 0
# case "$0" in
# -*) break ;;
# *) return 0 ;;
# esac
printf '\33]11;rgb:%02x/%02x/%02x\33\\' "$@"
}
__color_set()
{
[ "$__color_enabled" ] || return 0
__color=$((0))
while read -r __color_r __color_g __color_b __color_comment
do
[ "$__color_r" ] || continue
# Palette.
tput initc "$((__color))" $(__color_format \
"$__color_r" \
"$__color_g" \
"$__color_b"
)
# Background (color 0, to match the Linux console).
if [ "$__color" -eq 0 ]
then
__color_set_bg \
"$__color_r" \
"$__color_g" \
"$__color_b"
fi
# Foreground (color 7, to match the Linux console).
if [ "$__color" -eq 7 ]
then
__color_set_fg \
"$__color_r" \
"$__color_g" \
"$__color_b"
fi
__color=$((__color + 1))
done
}
__color_set_uniform_hard_linear()
{
# https://notes.rcrnstn.net/colors.md
# hard-linear
echo '
0x00 0x00 0x00 Black
0xa4 0x6a 0x6a Red
0x4e 0x86 0x56 Green
0x87 0x79 0x40 Yellow
0x64 0x7a 0xa4 Blue
0x9c 0x68 0x98 Magenta
0x07 0x87 0x88 Cyan
0x79 0x79 0x79 White
0x3e 0x3e 0x3e Bright Black
0xff 0xa6 0xa7 Bright Red
0x7b 0xd1 0x88 Bright Green
0xd3 0xbe 0x67 Bright Yellow
0x9d 0xbf 0xff Bright Blue
0xf3 0xa3 0xec Bright Magenta
0x00 0xd3 0xd4 Bright Cyan
0xbe 0xbe 0xbe Bright White
' | __color_set
}
__color_set_twisted1()
{
echo '
0x00 0x00 0x00 Black
0x9a 0x6a 0x4b Red
0x08 0x84 0x65 Green
0x6d 0x7b 0x32 Yellow
0x7d 0x6b 0xa4 Blue
0xa4 0x5e 0x83 Magenta
0x08 0x80 0x95 Cyan
0x75 0x75 0x75 White
0x3b 0x3b 0x3b BrightBlack
0xee 0xa6 0x77 BrightRed
0x09 0xce 0x9e BrightGreen
0xab 0xbf 0x51 BrightYellow
0xc3 0xa8 0xfd BrightBlue
0xfe 0x94 0xcd BrightMagenta
0x07 0xc7 0xe8 BrightCyan
0xb6 0xb6 0xb6 BrightWhite
' | __color_set
}
__color_set_twisted2()
{
echo '
0x00 0x00 0x00 Black
0xa4 0x5e 0x83 Red
0x6d 0x7b 0x32 Green
0x9a 0x6a 0x4b Yellow
0x08 0x80 0x95 Blue
0x7d 0x6b 0xa4 Magenta
0x08 0x84 0x65 Cyan
0x75 0x75 0x75 White
0x3b 0x3b 0x3b BrightBlack
0xfe 0x94 0xcd BrightRed
0xab 0xbf 0x51 BrightGreen
0xee 0xa6 0x77 BrightYellow
0x07 0xc7 0xe8 BrightBlue
0xc3 0xa8 0xfd BrightMagenta
0x09 0xce 0x9e BrightCyan
0xb6 0xb6 0xb6 BrightWhite
' | __color_set
}
__color_set_alacritty()
{
# https://github.com/alacritty/alacritty/blob/master/extra/man/alacritty.5.scd#colors
echo '
0x0f 0x0f 0x0f Black
0x71 0x2b 0x2b Red
0x5f 0x6f 0x3a Green
0xa1 0x7e 0x4d Yellow
0x45 0x68 0x77 Blue
0x70 0x4d 0x68 Magenta
0x4d 0x77 0x70 Cyan
0x8e 0x8e 0x8e White
0x6b 0x6b 0x6b Bright Black
0xc5 0x55 0x55 Bright Red
0xaa 0xc4 0x74 Bright Green
0xfe 0xca 0x88 Bright Yellow
0x82 0xb8 0xc8 Bright Blue
0xc2 0x8c 0xb8 Bright Magenta
0x93 0xd3 0xc3 Bright Cyan
0xf8 0xf8 0xf8 Bright White
' | __color_set
}
__color_set_uniform_hard_linear
|