Skip to content
This repository has been archived by the owner on Apr 7, 2023. It is now read-only.

Commit

Permalink
feat: added spinner script
Browse files Browse the repository at this point in the history
  • Loading branch information
tobybatch committed Feb 28, 2023
1 parent 19ec044 commit a108b70
Showing 1 changed file with 89 additions and 0 deletions.
89 changes: 89 additions & 0 deletions spinner
Original file line number Diff line number Diff line change
@@ -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 $!

0 comments on commit a108b70

Please sign in to comment.