This commit is contained in:
crowetic 2025-07-15 18:05:29 -07:00
parent a226e34803
commit a845b83b46

View File

@ -32,39 +32,36 @@ render_gradient_string() {
rainbowize_text() { rainbowize_text() {
local text="$1" local text="$1"
local freq=0.2 local freq=0.15
local i=0
local pi=3.14159265 local pi=3.14159265
local output="" local i=0
local r g b char
clamp() { while IFS= read -r -n1 char || [ -n "$char" ]; do
local val="$1" min="$2" max="$3"
if (( val < min )); then echo "$min"; elif (( val > max )); then echo "$max"; else echo "$val"; fi
}
while IFS= read -r -n1 char || [[ -n "$char" ]]; do
if [[ "$char" == $'\n' ]]; then if [[ "$char" == $'\n' ]]; then
output+=$'\n' echo # newline
continue continue
fi fi
r=$(awk -v i="$i" -v f="$freq" 'BEGIN { printf("%d", 127 * (sin(f*i + 0) + 1)) }') # ANSI-safe: skip formatting on control characters
g=$(awk -v i="$i" -v f="$freq" 'BEGIN { printf("%d", 127 * (sin(f*i + 2*3.1415/3) + 1)) }') if [[ "$char" =~ [[:cntrl:]] ]]; then
b=$(awk -v i="$i" -v f="$freq" 'BEGIN { printf("%d", 127 * (sin(f*i + 4*3.1415/3) + 1)) }') continue
fi
r=$(clamp "$r" 60 200) r=$(printf "%.0f" "$(echo "s($freq*$i + 0) * 95 + 160" | bc -l)")
g=$(clamp "$g" 60 200) g=$(printf "%.0f" "$(echo "s($freq*$i + 2*$pi/3) * 95 + 160" | bc -l)")
b=$(clamp "$b" 60 200) b=$(printf "%.0f" "$(echo "s($freq*$i + 4*$pi/3) * 95 + 160" | bc -l)")
output+="#$(printf "%02x%02x%02x" "$r" "$g" "$b")$char" printf "\e[38;2;%d;%d;%dm%s" "$r" "$g" "$b" "$char"
((i++)) ((i++))
done <<< "$text" done <<< "$text"
echo -n "$output" echo -e "\e[0m"
} }
# rainbowize_text() { # rainbowize_text() {
# local text="$1" # local text="$1"
# local freq=0.15 # local freq=0.15