From a108b706ae513f8cf5b58f8863187c690c75f5e3 Mon Sep 17 00:00:00 2001 From: Tobias Batch Date: Tue, 28 Feb 2023 15:05:09 +0000 Subject: [PATCH] feat: added spinner script --- spinner | 89 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 89 insertions(+) create mode 100755 spinner diff --git a/spinner b/spinner new file mode 100755 index 0000000..911604a --- /dev/null +++ b/spinner @@ -0,0 +1,89 @@ +#!/bin/bash +# Shows a spinner while another command is running. Randomly picks one of 12 spinner styles. +# @args command to run (with any parameters) while showing a spinner. +# E.g. ‹spinner sleep 10› + +function shutdown() { + tput cnorm # reset cursor +} +trap shutdown EXIT + +function cursorBack() { + echo -en "\033[$1D" +} + +function spinner() { + # make sure we use non-unicode character type locale + # (that way it works for any locale as long as the font supports the characters) + local LC_CTYPE=C + + local pid=$1 # Process Id of the previous running command + + case $(($RANDOM % 12)) in + 0) + local spin='⠁⠂⠄⡀⢀⠠⠐⠈' + local charwidth=3 + ;; + 1) + local spin='-\|/' + local charwidth=1 + ;; + 2) + local spin="▁▂▃▄▅▆▇█▇▆▅▄▃▂▁" + local charwidth=3 + ;; + 3) + local spin="▉▊▋▌▍▎▏▎▍▌▋▊▉" + local charwidth=3 + ;; + 4) + local spin='←↖↑↗→↘↓↙' + local charwidth=3 + ;; + 5) + local spin='▖▘▝▗' + local charwidth=3 + ;; + 6) + local spin='┤┘┴└├┌┬┐' + local charwidth=3 + ;; + 7) + local spin='◢◣◤◥' + local charwidth=3 + ;; + 8) + local spin='◰◳◲◱' + local charwidth=3 + ;; + 9) + local spin='◴◷◶◵' + local charwidth=3 + ;; + 10) + local spin='◐◓◑◒' + local charwidth=3 + ;; + 11) + local spin='⣾⣽⣻⢿⡿⣟⣯⣷' + local charwidth=3 + ;; + esac + + local i=0 + tput civis # cursor invisible + while kill -0 $pid 2>/dev/null; do + local i=$(((i + $charwidth) % ${#spin})) + printf "%s" "${spin:$i:$charwidth}" + + cursorBack 1 + sleep .1 + done + tput cnorm + wait $pid # capture exit code + return $? +} + +("$@") & + +spinner $!