aboutsummaryrefslogtreecommitdiffstats
path: root/.config/init/helpers
diff options
context:
space:
mode:
Diffstat (limited to '.config/init/helpers')
-rw-r--r--.config/init/helpers115
1 files changed, 104 insertions, 11 deletions
diff --git a/.config/init/helpers b/.config/init/helpers
index 69963cb..1f2ed89 100644
--- a/.config/init/helpers
+++ b/.config/init/helpers
@@ -1,12 +1,111 @@
+# $1 - message
print-error() {
1>&2 echo "\e[1;31merror:\e[0m $1"
}
+# $1 - message
abort() {
print-error $1
exit 1
}
+# $1 - count
+# $2 - message (opt)
+# $3 - colourpat (opt)
+progress-bar() {
+
+ zmodload zsh/datetime zsh/mathfunc || return 1
+
+ [[ $#@ -ne 0 ]] && [[ $#@ -lt 4 ]] || return 1
+
+ local countpat='^[1-9][0-9]*$'
+ local colourpat='^(black|light_black|red|light_red|green|light_green|yellow|light_yellow|blue|light_blue|magenta|light_magenta|cyan|light_cyan|white|light_white)$'
+
+ local count
+ [[ $1 =~ $countpat ]] && count=$1 || return 1
+ if [[ ! -z $3 ]]; then
+ [[ $3 =~ $colourpat ]] || return 1
+ fi
+
+ local message
+ local colour
+
+ [[ -z $2 ]] && message='waiting' || message=$2
+ [[ -z $3 ]] && colour='yellow' || colour=$3
+
+ case $colour in
+ 'black') colour='\e[30m' ;;
+ 'light_black') colour='\e[1;30m' ;;
+ 'red') colour='\e[31m' ;;
+ 'light_red') colour='\e[1;31m' ;;
+ 'green') colour='\e[32m' ;;
+ 'light_green') colour='\e[1;32m' ;;
+ 'yellow') colour='\e[33m' ;;
+ 'light_yellow') colour='\e[1;33m' ;;
+ 'blue') colour='\e[34m' ;;
+ 'light_blue') colour='\e[1;34m' ;;
+ 'magenta') colour='\e[35m' ;;
+ 'light_magenta') colour='\e[1;35m' ;;
+ 'cyan') colour='\e[36m' ;;
+ 'light_cyan') colour='\e[1;36m' ;;
+ 'white') colour='\e[37m' ;;
+ 'light_white') colour='\e[1;37m' ;;
+ esac
+
+ local i=0
+ local starttime=$EPOCHREALTIME
+ local lasttime=$starttime
+ local thistime=$starttime
+ local elapsed=0
+ while true; do
+
+ [[ $i -eq $count ]] && break
+
+ local width=$COLUMNS
+ local statwidth=$(( ($#count * 2) + 20))
+ local progwidth=$(($width - $statwidth - 3))
+ [[ $progwidth -gt 30 || $progwidth -le 1 ]] && progwidth=30
+
+ if [[ $i -eq 0 || $elapsed -eq 0 ]]; then
+ eta='??:??:??'
+ else
+ local left=$(( ($count - $i) * ($elapsed / $i) - ($EPOCHREALTIME - $lasttime) ))
+ if [[ $left -ge 86400 ]]; then
+ eta=' days...'
+ elif [[ $left -le 0 ]]; then
+ eta='00:00:00'
+ else
+ eta=$(strftime '%H:%M:%S' ${$(( ceil($left + 802800) )):s/\./})
+ fi
+ fi
+
+ local fpart=""
+ local epart=""
+ local progress=$(($i * $progwidth / $count))
+ repeat $progress fpart="$fpart#"
+ repeat $(($progwidth-$progress)) epart="$epart-"
+
+ printf \
+ "\e[G\e[K$colour%s...\e[0m\n[%${#count}s/$count] [eta: $eta] [$fpart$epart]\e[J" \
+ $message \
+ $i \
+
+ read -t 0.2 \
+ && thistime=$EPOCHREALTIME \
+ && elapsed=$(($elapsed + $thistime - $lasttime)) \
+ && lasttime=$EPOCHREALTIME \
+ && i=$(($i + 1))
+
+ printf "\e[F"
+ done
+
+ [[ $i -eq $count ]] && echo "\e[G\e[32m$message... done!\e[0m\e[J" \
+ || echo "\e[G\e[31m$message... failed!\e[0m\e[J"
+}
+
+# $1 - pid
+# $2 - message (opt)
+# $3 - colourpat (opt)
wait-anim() {
[[ $#@ -ne 0 ]] && [[ $#@ -lt 4 ]] || return 1
@@ -21,7 +120,7 @@ wait-anim() {
local message
local colour
- [[ -z $2 ]] && message='waiting...' || message=$2
+ [[ -z $2 ]] && message='waiting' || message=$2
[[ -z $3 ]] && colour='yellow' || colour=$3
case $colour in
@@ -57,21 +156,15 @@ wait-anim() {
esac
(while 2>/dev/null kill -0 $1; do
- if [[ -z $curframe ]]; then
- curframe=0
- printf "\e[s"
- else
- printf "\e[u\e[K"
- fi
- printf "|\e[1;32m${frames[$(($curframe + 1))]}\e[0m| $colour$message\e[0m"
+ [[ -z $curframe ]] && curframe=0
+ printf "\e[G\e[K|\e[1;32m${frames[$(($curframe + 1))]}\e[0m| $colour$message...\e[0m"
curframe=$(( ($curframe + 1) % $#frames ))
sleep .2
done) &
- # trap "echo -n '\e[G\e[J\e[s'" SIGWINCH
-
wait $1
local r=$?
- printf "\e[u\e[K"
+ [[ $r ]] && printf "\e[G\e[K\e[31m$message... failed!\e[0m\n" \
+ || printf "\e[G\e[K\e[32m$message... done!\e[0m\n"
return $r
}