mirror of
https://github.com/zplug/zplug
synced 2025-08-28 16:51:38 +02:00
65 lines
1.4 KiB
Bash
65 lines
1.4 KiB
Bash
#!/bin/zsh
|
|
|
|
__import "print/print"
|
|
|
|
typeset -g spin_file=/tmp/.spin.$$$RANDOM
|
|
|
|
__zplug::job::spinner::is_spin() {
|
|
[[ -f $spin_file ]]
|
|
}
|
|
|
|
__zplug::job::spinner::lock() {
|
|
if ! __zplug::job::spinner::is_spin; then
|
|
set +m
|
|
touch $spin_file &>/dev/null
|
|
fi
|
|
}
|
|
|
|
__zplug::job::spinner::unlock() {
|
|
if __zplug::job::spinner::is_spin; then
|
|
rm -f $spin_file &>/dev/null
|
|
fi
|
|
}
|
|
|
|
__zplug::job::spinner::spinner() {
|
|
local spin format
|
|
local -F latency
|
|
local -a spinners
|
|
|
|
# spinners=("⠄" "⠆" "⠇" "⠋" "⠙" "⠸" "⠰" "⠠" "⠰" "⠸" "⠙" "⠋" "⠇" "⠆")
|
|
spinners=(⠋ ⠙ ⠹ ⠸ ⠼ ⠴ ⠦ ⠧ ⠇ ⠏)
|
|
format="@"
|
|
latency=0.03
|
|
|
|
while __zplug::job::spinner::is_spin
|
|
do
|
|
for spin in $spinners
|
|
do
|
|
__zplug::job::spinner::is_spin || break
|
|
__zplug::print::print::put "$format" | awk -v t=$latency -v i=$(__zplug::print::print::put "$spin" | sed 's/=/\\\=/') '
|
|
{
|
|
system("tput civis")
|
|
gsub("@", i)
|
|
printf("%s\r", $0)
|
|
fflush()
|
|
system("sleep "t"")
|
|
}
|
|
' >/dev/stderr
|
|
done
|
|
done
|
|
|
|
tput cnorm
|
|
awk 'END { fflush() }'
|
|
printf "\r\033[0K"
|
|
set -m
|
|
}
|
|
|
|
__zplug::job::spinner::echo() {
|
|
if __zplug::job::spinner::is_spin; then
|
|
__zplug::print::print::put "$@"
|
|
return 0
|
|
else
|
|
return 1
|
|
fi
|
|
}
|