oh-my-bash/lib/omb-prompt-colors.sh
2023-02-12 17:04:12 +09:00

195 lines
13 KiB
Bash

#! bash oh-my-bash.module
#
# 2022-01-20 Koichi Murase: renamed from "themes/colours.theme.sh" to "lib/omb-prompt-colors.sh"
_omb_module_require lib:omb-deprecate
function _omb_theme__construct_sgr {
out=
local reset=
while (($#)); do
local next=$1; shift
case $next in
reset) reset=0 ;;
bold) out=${out:+$out;}1 ;;
faint) out=${out:+$out;}2 ;;
italic) out=${out:+$out;}3 ;;
underline) out=${out:+$out;}4 ;;
negative) out=${out:+$out;}7 ;;
crossed) out=${out:+$out;}8 ;;
color)
local color=$1; shift
local side=fg mode=normal
case $1 in
fg | bg) side=$1; shift ;;
esac
case $1 in
normal | bright) mode=$1; shift ;;
esac
local prefix=3
case $side:$mode in
fg:normal) prefix=3 ;;
bg:normal) prefix=4 ;;
fg:bright) prefix=9 ;;
bg:bright) prefix=10 ;;
esac
case $color in
black) color=0 ;;
red) color=1 ;;
green) color=2 ;;
yellow) color=3 ;;
blue) color=4 ;;
magenta) color=5 ;;
cyan) color=6 ;;
white) color=7 ;;
rgb)
local r=$1 g=$2 b=$3; shift 3
if ((r == g && g == b)); then
# gray range above 232
color=$((232 + r / 11))
else
color="8;5;$(((r * 36 + b * 6 + g) / 51 + 16))"
fi ;;
*) printf '%s\n' "_omb_theme_color: unknown color '$color'" >&2
continue ;;
esac
out=${out:+$out;}$prefix$color ;;
'')
out="${out:+$out;}$*" ;;
*)
printf '%s\n' "_omb_theme_color: unknown token '$next'" >&2 ;;
esac
done
if [[ $reset ]]; then
out=$reset${out:+;$out}
fi
}
function _omb_theme_color_prompt {
local out
_omb_theme__construct_sgr "$@"
echo "\[\e[${out}m\]"
}
function _omb_theme_color_echo {
local out
_omb_theme__construct_sgr "$@"
echo "\033[${out}m"
}
function _omb_prompt_color_initialize {
_omb_prompt_normal='\[\e[0m\]'
_omb_prompt_reset_color='\[\e[39m\]'
# used by themes/gallifrey
_omb_prompt_bold='\[\e[1m\]'
local -a normal_colors=(black brown green olive navy purple teal silver)
local -a bright_colors=(gray red lime yellow blue magenta cyan white)
local bright_fg_prefix=9 bright_bg_prefix=10
((_omb_term_colors >= 16)) || bright_fg_prefix=3 bright_bg_prefix=4
local index
for ((index = 0; index < 8; index++)); do
printf -v "_omb_prompt_${normal_colors[index]}" %s '\[\e[0;3'"$index"'m\]'
printf -v "_omb_prompt_bold_${normal_colors[index]}" %s '\[\e[3'"$index"';1m\]'
printf -v "_omb_prompt_underline_${normal_colors[index]}" %s '\[\e[3'"$index"';4m\]'
printf -v "_omb_prompt_background_${normal_colors[index]}" %s '\[\e[4'"$index"'m\]'
printf -v "_omb_prompt_${bright_colors[index]}" %s '\[\e[0;'"$bright_fg_prefix$index"'m\]'
printf -v "_omb_prompt_bold_${bright_colors[index]}" %s '\[\e['"$bright_fg_prefix$index"';1m\]'
printf -v "_omb_prompt_underline_${bright_colors[index]}" %s '\[\e['"$bright_fg_prefix$index"';4m\]'
printf -v "_omb_prompt_background_${bright_colors[index]}" %s '\[\e['"$bright_bg_prefix$index"'m\]'
done
}
_omb_prompt_color_initialize
_omb_deprecate_function 20000 color _omb_theme_color_prompt
_omb_deprecate_function 20000 echo_color _omb_theme_color_echo
_omb_deprecate_const 20000 black "$_omb_prompt_black" "${_omb_deprecate_msg_please_use/'%s'/_omb_prompt_black}"
_omb_deprecate_const 20000 cyan "$_omb_prompt_teal" "${_omb_deprecate_msg_please_use/'%s'/_omb_prompt_teal}"
_omb_deprecate_const 20000 white "$_omb_prompt_white" "${_omb_deprecate_msg_please_use/'%s'/_omb_prompt_white}"
_omb_deprecate_const 20000 orange "$_omb_prompt_red" "${_omb_deprecate_msg_please_use/'%s'/_omb_prompt_red}"
_omb_deprecate_const 20000 bold_black "$_omb_prompt_bold_black" "${_omb_deprecate_msg_please_use/'%s'/_omb_prompt_bold_black}"
_omb_deprecate_const 20000 bold_red "$_omb_prompt_bold_brown" "${_omb_deprecate_msg_please_use/'%s'/_omb_prompt_bold_brown}"
_omb_deprecate_const 20000 bold_green "$_omb_prompt_bold_green" "${_omb_deprecate_msg_please_use/'%s'/_omb_prompt_bold_green}"
_omb_deprecate_const 20000 bold_yellow "$_omb_prompt_bold_olive" "${_omb_deprecate_msg_please_use/'%s'/_omb_prompt_bold_olive}"
_omb_deprecate_const 20000 bold_blue "$_omb_prompt_bold_navy" "${_omb_deprecate_msg_please_use/'%s'/_omb_prompt_bold_navy}"
_omb_deprecate_const 20000 bold_purple "$_omb_prompt_bold_purple" "${_omb_deprecate_msg_please_use/'%s'/_omb_prompt_bold_purple}"
_omb_deprecate_const 20000 bold_cyan "$_omb_prompt_bold_teal" "${_omb_deprecate_msg_please_use/'%s'/_omb_prompt_bold_teal}"
_omb_deprecate_const 20000 bold_white "$_omb_prompt_bold_white" "${_omb_deprecate_msg_please_use/'%s'/_omb_prompt_bold_white}"
_omb_deprecate_const 20000 bold_orange "$_omb_prompt_bold_red" "${_omb_deprecate_msg_please_use/'%s'/_omb_prompt_bold_red}"
_omb_deprecate_const 20000 underline_black "$_omb_prompt_underline_black" "${_omb_deprecate_msg_please_use/'%s'/_omb_prompt_underline_black}"
_omb_deprecate_const 20000 underline_red "$_omb_prompt_underline_brown" "${_omb_deprecate_msg_please_use/'%s'/_omb_prompt_underline_brown}"
_omb_deprecate_const 20000 underline_green "$_omb_prompt_underline_green" "${_omb_deprecate_msg_please_use/'%s'/_omb_prompt_underline_green}"
_omb_deprecate_const 20000 underline_yellow "$_omb_prompt_underline_olive" "${_omb_deprecate_msg_please_use/'%s'/_omb_prompt_underline_olive}"
_omb_deprecate_const 20000 underline_blue "$_omb_prompt_underline_navy" "${_omb_deprecate_msg_please_use/'%s'/_omb_prompt_underline_navy}"
_omb_deprecate_const 20000 underline_purple "$_omb_prompt_underline_purple" "${_omb_deprecate_msg_please_use/'%s'/_omb_prompt_underline_purple}"
_omb_deprecate_const 20000 underline_cyan "$_omb_prompt_underline_teal" "${_omb_deprecate_msg_please_use/'%s'/_omb_prompt_underline_teal}"
_omb_deprecate_const 20000 underline_white "$_omb_prompt_underline_white" "${_omb_deprecate_msg_please_use/'%s'/_omb_prompt_underline_white}"
_omb_deprecate_const 20000 underline_orange "$_omb_prompt_underline_red" "${_omb_deprecate_msg_please_use/'%s'/_omb_prompt_underline_red}"
_omb_deprecate_const 20000 background_black "$_omb_prompt_background_black" "${_omb_deprecate_msg_please_use/'%s'/_omb_prompt_background_black}"
_omb_deprecate_const 20000 background_red "$_omb_prompt_background_brown" "${_omb_deprecate_msg_please_use/'%s'/_omb_prompt_background_brown}"
_omb_deprecate_const 20000 background_green "$_omb_prompt_background_green" "${_omb_deprecate_msg_please_use/'%s'/_omb_prompt_background_green}"
_omb_deprecate_const 20000 background_yellow "$_omb_prompt_background_olive" "${_omb_deprecate_msg_please_use/'%s'/_omb_prompt_background_olive}"
_omb_deprecate_const 20000 background_blue "$_omb_prompt_background_navy" "${_omb_deprecate_msg_please_use/'%s'/_omb_prompt_background_navy}"
_omb_deprecate_const 20000 background_purple "$_omb_prompt_background_purple" "${_omb_deprecate_msg_please_use/'%s'/_omb_prompt_background_purple}"
_omb_deprecate_const 20000 background_cyan "$_omb_prompt_background_teal" "${_omb_deprecate_msg_please_use/'%s'/_omb_prompt_background_teal}"
_omb_deprecate_const 20000 background_white "$_omb_prompt_background_white" "${_omb_deprecate_msg_please_use/'%s'/_omb_prompt_background_white}"
_omb_deprecate_const 20000 background_orange "$_omb_prompt_background_red" "${_omb_deprecate_msg_please_use/'%s'/_omb_prompt_background_red}"
_omb_deprecate_const 20000 normal "$_omb_prompt_normal" "${_omb_deprecate_msg_please_use/'%s'/_omb_prompt_normal}"
_omb_deprecate_const 20000 reset_color "$_omb_prompt_reset_color" "${_omb_deprecate_msg_please_use/'%s'/_omb_prompt_reset_color}"
_omb_deprecate_const 20000 echo_black "$_omb_term_black" "${_omb_deprecate_msg_please_use/'%s'/_omb_term_black}"
_omb_deprecate_const 20000 echo_red "$_omb_term_brown" "${_omb_deprecate_msg_please_use/'%s'/_omb_term_brown}"
_omb_deprecate_const 20000 echo_green "$_omb_term_green" "${_omb_deprecate_msg_please_use/'%s'/_omb_term_green}"
_omb_deprecate_const 20000 echo_yellow "$_omb_term_olive" "${_omb_deprecate_msg_please_use/'%s'/_omb_term_olive}"
_omb_deprecate_const 20000 echo_blue "$_omb_term_navy" "${_omb_deprecate_msg_please_use/'%s'/_omb_term_navy}"
_omb_deprecate_const 20000 echo_purple "$_omb_term_purple" "${_omb_deprecate_msg_please_use/'%s'/_omb_term_purple}"
_omb_deprecate_const 20000 echo_cyan "$_omb_term_teal" "${_omb_deprecate_msg_please_use/'%s'/_omb_term_teal}"
_omb_deprecate_const 20000 echo_white "$_omb_term_white" "${_omb_deprecate_msg_please_use/'%s'/_omb_term_white}"
_omb_deprecate_const 20000 echo_orange "$_omb_term_red" "${_omb_deprecate_msg_please_use/'%s'/_omb_term_red}"
_omb_deprecate_const 20000 echo_bold_black "$_omb_term_bold_black" "${_omb_deprecate_msg_please_use/'%s'/_omb_term_bold_black}"
_omb_deprecate_const 20000 echo_bold_red "$_omb_term_bold_brown" "${_omb_deprecate_msg_please_use/'%s'/_omb_term_bold_brown}"
_omb_deprecate_const 20000 echo_bold_green "$_omb_term_bold_green" "${_omb_deprecate_msg_please_use/'%s'/_omb_term_bold_green}"
_omb_deprecate_const 20000 echo_bold_yellow "$_omb_term_bold_olive" "${_omb_deprecate_msg_please_use/'%s'/_omb_term_bold_olive}"
_omb_deprecate_const 20000 echo_bold_blue "$_omb_term_bold_navy" "${_omb_deprecate_msg_please_use/'%s'/_omb_term_bold_navy}"
_omb_deprecate_const 20000 echo_bold_purple "$_omb_term_bold_purple" "${_omb_deprecate_msg_please_use/'%s'/_omb_term_bold_purple}"
_omb_deprecate_const 20000 echo_bold_cyan "$_omb_term_bold_teal" "${_omb_deprecate_msg_please_use/'%s'/_omb_term_bold_teal}"
_omb_deprecate_const 20000 echo_bold_white "$_omb_term_bold_white" "${_omb_deprecate_msg_please_use/'%s'/_omb_term_bold_white}"
_omb_deprecate_const 20000 echo_bold_orange "$_omb_term_bold_red" "${_omb_deprecate_msg_please_use/'%s'/_omb_term_bold_red}"
_omb_deprecate_const 20000 echo_underline_black "$_omb_term_underline_black" "${_omb_deprecate_msg_please_use/'%s'/_omb_term_underline_black}"
_omb_deprecate_const 20000 echo_underline_red "$_omb_term_underline_brown" "${_omb_deprecate_msg_please_use/'%s'/_omb_term_underline_brown}"
_omb_deprecate_const 20000 echo_underline_green "$_omb_term_underline_green" "${_omb_deprecate_msg_please_use/'%s'/_omb_term_underline_green}"
_omb_deprecate_const 20000 echo_underline_yellow "$_omb_term_underline_olive" "${_omb_deprecate_msg_please_use/'%s'/_omb_term_underline_olive}"
_omb_deprecate_const 20000 echo_underline_blue "$_omb_term_underline_navy" "${_omb_deprecate_msg_please_use/'%s'/_omb_term_underline_navy}"
_omb_deprecate_const 20000 echo_underline_purple "$_omb_term_underline_purple" "${_omb_deprecate_msg_please_use/'%s'/_omb_term_underline_purple}"
_omb_deprecate_const 20000 echo_underline_cyan "$_omb_term_underline_teal" "${_omb_deprecate_msg_please_use/'%s'/_omb_term_underline_teal}"
_omb_deprecate_const 20000 echo_underline_white "$_omb_term_underline_white" "${_omb_deprecate_msg_please_use/'%s'/_omb_term_underline_white}"
_omb_deprecate_const 20000 echo_underline_orange "$_omb_term_underline_red" "${_omb_deprecate_msg_please_use/'%s'/_omb_term_underline_red}"
_omb_deprecate_const 20000 echo_background_black "$_omb_term_background_black" "${_omb_deprecate_msg_please_use/'%s'/_omb_term_background_black}"
_omb_deprecate_const 20000 echo_background_red "$_omb_term_background_brown" "${_omb_deprecate_msg_please_use/'%s'/_omb_term_background_brown}"
_omb_deprecate_const 20000 echo_background_green "$_omb_term_background_green" "${_omb_deprecate_msg_please_use/'%s'/_omb_term_background_green}"
_omb_deprecate_const 20000 echo_background_yellow "$_omb_term_background_olive" "${_omb_deprecate_msg_please_use/'%s'/_omb_term_background_olive}"
_omb_deprecate_const 20000 echo_background_blue "$_omb_term_background_navy" "${_omb_deprecate_msg_please_use/'%s'/_omb_term_background_navy}"
_omb_deprecate_const 20000 echo_background_purple "$_omb_term_background_purple" "${_omb_deprecate_msg_please_use/'%s'/_omb_term_background_purple}"
_omb_deprecate_const 20000 echo_background_cyan "$_omb_term_background_teal" "${_omb_deprecate_msg_please_use/'%s'/_omb_term_background_teal}"
_omb_deprecate_const 20000 echo_background_white "$_omb_term_background_white" "${_omb_deprecate_msg_please_use/'%s'/_omb_term_background_white}"
_omb_deprecate_const 20000 echo_background_orange "$_omb_term_background_red" "${_omb_deprecate_msg_please_use/'%s'/_omb_term_background_red}"
_omb_deprecate_const 20000 echo_normal "$_omb_term_normal" "${_omb_deprecate_msg_please_use/'%s'/_omb_term_normal}"
_omb_deprecate_const 20000 echo_reset_color "$_omb_term_reset_color" "${_omb_deprecate_msg_please_use/'%s'/_omb_term_reset_color}"