73 lines
1.9 KiB
Text
73 lines
1.9 KiB
Text
|
#!/usr/bin/env sh
|
||
|
#
|
||
|
# Determine if term background is dark or light.
|
||
|
# Uses a couple different heuristics, most of them
|
||
|
# from this:
|
||
|
# https://unix.stackexchange.com/questions/245378/common-environment-variable-to-set-dark-or-light-terminal-background
|
||
|
# unix exchange.
|
||
|
#
|
||
|
# If the background is dark, returns exit code 0 (true).
|
||
|
# If the background is light, returns exit code 1 (false).
|
||
|
# TODO implement alternative $COLORBFG method
|
||
|
|
||
|
is_dark() {
|
||
|
IFS=/ read -r bg_r bg_g bg_b << EOF
|
||
|
${1:-"0000/0000/0000"}
|
||
|
EOF
|
||
|
IFS=/ read -r fg_r fg_g fg_b << EOF
|
||
|
${2:-"ffff/ffff/ffff"}
|
||
|
EOF
|
||
|
calc=$(echo "($bg_r+$bg_g+$bg_b)-($fg_r+$fg_g+$fg_b)" | tr '[:lower:]' '[:upper:]')
|
||
|
luminance=$(echo "ibase=16; $calc" | bc)
|
||
|
if [ "$luminance" -lt 0 ]; then
|
||
|
true
|
||
|
else
|
||
|
false
|
||
|
fi
|
||
|
}
|
||
|
|
||
|
orig_ssty=$(stty -g)
|
||
|
stty raw -echo min 0 time 0
|
||
|
printf '\e]11;?\a'
|
||
|
sleep 0.01
|
||
|
read -r answer
|
||
|
bg="${answer#*;}"
|
||
|
printf '\e]10;?\a'
|
||
|
sleep 0.01
|
||
|
read -r answer
|
||
|
fg="${answer#*;}"
|
||
|
|
||
|
stty "$orig_ssty"
|
||
|
|
||
|
bg=$(echo "${bg}" | sed 's/.*\(rgb:[0-9a-f/]*\).*/\1/')
|
||
|
fg=$(echo "${fg}" | sed 's/.*\(rgb:[0-9a-f/]*\).*/\1/')
|
||
|
|
||
|
# from the amazing
|
||
|
# https://stackoverflow.com/questions/2683279/how-to-detect-if-a-script-is-being-sourced
|
||
|
# answer
|
||
|
sourced=0
|
||
|
if [ -n "$ZSH_VERSION" ]; then
|
||
|
case $ZSH_EVAL_CONTEXT in *:file) sourced=1;; esac
|
||
|
elif [ -n "$KSH_VERSION" ]; then
|
||
|
# shellcheck disable=SC2296
|
||
|
[ "$(cd -- "$(dirname -- "$0")" && pwd -P)/$(basename -- "$0")" != "$(cd -- "$(dirname -- "${.sh.file}")" && pwd -P)/$(basename -- "${.sh.file}")" ] && sourced=1
|
||
|
elif [ -n "$BASH_VERSION" ]; then
|
||
|
(return 0 2>/dev/null) && sourced=1
|
||
|
else
|
||
|
# Detects `sh` and `dash`; add additional shell filenames as needed.
|
||
|
case ${0##*/} in sh|-sh|dash|-dash) sourced=1;; esac
|
||
|
fi
|
||
|
|
||
|
is_dark "${bg#rgb:}" "${fg#rgb:}"
|
||
|
outp="$?"
|
||
|
|
||
|
if [ "$sourced" -eq 1 ]; then
|
||
|
if [ "$outp" -eq 0 ]; then
|
||
|
export TERM_DARK=true
|
||
|
else
|
||
|
export TERM_DARK=false
|
||
|
fi
|
||
|
else
|
||
|
exit "$outp"
|
||
|
fi
|