1
0
Fork 0
mirror of https://github.com/notwa/rc synced 2024-11-05 08:29:02 -08:00

add terminal palette scripts (recolor and subdue)

This commit is contained in:
Connor Olding 2024-07-05 15:06:11 -07:00
parent 2c9262f77b
commit 13f38a7687
2 changed files with 171 additions and 0 deletions

136
sh/recolor Executable file
View file

@ -0,0 +1,136 @@
#!/usr/bin/env sh
# YES_ZSH YES_BASH YES_DASH YES_ASH
__recolor_install() {
ForegroundColour() { recolor RAW 10 "$@"; }
BackgroundColour() { recolor RAW 11 "$@"; }
CursorColour() { recolor RAW 12 "$@"; }
Black() { recolor 0 "$@"; }
BoldBlack() { recolor 8 "$@"; }
Red() { recolor 1 "$@"; }
BoldRed() { recolor 9 "$@"; }
Green() { recolor 2 "$@"; }
BoldGreen() { recolor 10 "$@"; }
Yellow() { recolor 3 "$@"; }
BoldYellow() { recolor 11 "$@"; }
Blue() { recolor 4 "$@"; }
BoldBlue() { recolor 12 "$@"; }
Magenta() { recolor 5 "$@"; }
BoldMagenta() { recolor 13 "$@"; }
Cyan() { recolor 6 "$@"; }
BoldCyan() { recolor 14 "$@"; }
White() { recolor 7 "$@"; }
BoldWhite() { recolor 15 "$@"; }
}
__recolor() {
# TODO: clean up and optimize the heck out of this, i.e.
# don't require 19+ subshells to replace every color.
pre='\033]'
post='\033\\'
tmuxy=0 screeny=0 linuxy=0
[ "${TERM#tmux}" = "$TERM" ] || tmuxy=1
[ "${TERM#screen}" = "$TERM" ] || { tmuxy=1; screeny=1; }
[ "${TERM#linux}" = "$TERM" ] || linuxy=1
[ -z "$TMUX" ] || tmuxy=0
[ "$tmuxy$screeny" = 00 ] || linuxy=0
if [ $tmuxy = 1 ]; then
pre='\033Ptmux;\033'"$pre"
post='\007'"$post"
elif [ $screeny = 1 ]; then
pre='\033P\033'"$pre"
post='\007'"$post"
fi
malarg() {
printf >&2 '%s: malformed argument #%s: %s\n' "$@"
exit 2
}
byteranged() {
[ "$1" -ge 0 ] && [ "$1" -le 255 ]
} 2>&-
valid_rex() {
[ -z "${2#[0-9a-f][0-9a-f]/[0-9a-f][0-9a-f]/[0-9a-f][0-9a-f]}" ]
}
rex() {
byteranged "$1" || malarg rex 1 "$1"
valid_rex || malarg rex 2 "$2"
if [ $linuxy = 1 ]; then
#local IFS=/
#set -- $1 $2
set -- "${1%%/*}" "${2#*/}"
set -- "$1" "${2%%/*}"
[ "$1" -ge 16 ] || printf '\e]P%x%s%s%s' "$@"
else
printf "${pre}4;%s;rgb:%s${post}" "$1" "$2"
fi
}
rexr() {
byteranged "$1" || malarg rexr 1 "$1"
valid_rex || malarg rexr 2 "$2"
if [ $linuxy = 1 ]; then
: # unsupported
else
printf "${pre}%s;rgb:%s${post}" "$1" "$2"
fi
}
colour_split() {
# use blue channel as a temporary variable.
b="${c%??}" r="${b%??}" g="${b#??}" b="${c#????}"
}
dirty=0 plus=0
n= r=ff g=ff b=ff a= c= i= raw=0
if [ "$1" = RAW ]; then raw=1; shift; fi
n="$1"
byteranged "$n" || malarg recolor 1 "$c"
if c="${2#\#}"; [ "$c" != "$2" ]; then
[ "${#c}" = 6 ] || malarg recolor 2 "$2"
v_lower c || return
colour_split || return
elif c="${2#0x}"; [ "$c" != "$2" ] && [ "${#c}" = 6 ]; then
v_lower c || return
colour_split || return
else
i=1
for a in "$2" "$3" "$4"; do
: $((i+=1))
if c="${a#0x}"; [ "$c" = "$a" ]; then
byteranged "$c" || malarg recolor $i "$c"
c="$(printf '%02x' "$c")" # TODO: avoid subshell.
fi
[ "${#c}" != 1 ] || c="0$c"
[ "${#c}" = 2 ] || malarg recolor $i "$c"
v_lower c || return
[ $i = 2 ] && r="$c" || [ $i = 3 ] && g="$c" || [ $i = 4 ] && b="$c"
done
fi
if [ $raw = 1 ]; then
rexr "$n" "$r/$g/$b"
else
rex "$n" "$r/$g/$b"
if [ "$n" -eq 21 ] && [ $plus = 1 ]; then
# use base16 "Bright White" for foreground as well.
rexr 10 "$r/$g/$b"
fi
fi
dirty=1
} >/dev/tty
recolor()(__recolor "$@")
[ -n "${preload+-}" ] || . ~/sh/preload || exit 2
eval ${preload:-preload} v_lower v_upper
[ -n "${preload+-}" ] || __recolor "$@"

35
sh/subdue Executable file
View file

@ -0,0 +1,35 @@
#!/usr/bin/env sh
# YES_ZSH YES_BASH YES_DASH YES_ASH
__subdue() { ### @subdue
### reconfigure your terminal's color scheme using a preset for [recolor.](#recolor)
# TODO: take a screenshot and include it in the docs.
__recolor_install
ForegroundColour '#ECECEC'
BackgroundColour '#111111'
CursorColour '#F9F9F9'
Black '#111111'
Red '#B62A1F'
Green '#41B43C'
Blue '#1D52E1'
Yellow '#ED9433'
Cyan '#40ADAC'
Magenta '#BA3CB9'
White '#BDBDBD'
BoldBlack '#747474'
BoldRed '#F43E31'
BoldGreen '#4FEB49'
BoldBlue '#4391F9'
BoldYellow '#F4F415'
BoldCyan '#3AF5F4'
BoldMagenta '#E84EE6'
BoldWhite '#ECECEC'
}
subdue()(__subdue "$@")
[ -n "${preload+-}" ] || . ~/sh/preload || exit 2
eval ${preload:-preload} recolor
[ -n "${preload+-}" ] || __subdue "$@"