+
+# * spark
+# spark 1 5 22 13 53
+# # => ▁▁▃▂▇
+
+# The MIT License
+# Copyright (c) Zach Holman, https://zachholman.com
+# https://github.com/holman/spark
+
+# As of 2022-10-28, I reviewed github forks that had several newer
+# commits, none had anything interesting. I did a little refactoring
+# mostly to fix emacs indent bug.
+
+# Generates sparklines.
+_spark_echo()
+{
+ if [ "X$1" = "X-n" ]; then
+ shift
+ printf "%s" "$*"
+ else
+ printf "%s\n" "$*"
+ fi
+}
+
+
+spark()
+{
+ local f tc
+ local n numbers=
+
+ # find min/max values
+ local min=0xffffffff max=0
+
+ for n in ${@//,/ }
+ do
+ # on Linux (or with bash4) we could use `printf %.0f $n` here to
+ # round the number but that doesn't work on OS X (bash3) nor does
+ # `awk '{printf "%.0f",$1}' <<< $n` work, so just cut it off
+ n=${n%.*}
+ (( n < min )) && min=$n
+ (( n > max )) && max=$n
+ numbers=$numbers${numbers:+ }$n
+ done
+
+ # print ticks
+ local ticks=(▁ ▂ ▃ ▄ ▅ ▆ ▇ █)
+
+ # use a high tick if data is constant
+ (( min == max )) && ticks=(▅ ▆)
+
+ tc=${#ticks[@]}
+ f=$(( ( (max-min) <<8)/( tc - 1) ))
+ (( f < 1 )) && f=1
+
+ for n in $numbers
+ do
+ _spark_echo -n ${ticks[$(( ((($n-$min)<<8)/$f) ))]}
+ done
+ _spark_echo
+}
+
+