aboutsummaryrefslogtreecommitdiffstats
path: root/.config/init/helpers
blob: 69963cb3905894b1ba7f4ec59b08f14ff039f307 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
print-error() {
	1>&2 echo "\e[1;31merror:\e[0m $1"
}

abort() {
	print-error $1
	exit 1
}

wait-anim() {
	[[ $#@ -ne 0 ]] && [[ $#@ -lt 4 ]] || return 1

	local pidpat='^[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)$'

	[[ $1 =~ $pidpat ]] || 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 curframe
	local frames

	case $(($RANDOM % 7)) in
		0) frames=('▁' '▂' '▃' '▄' '▅' '▆' '▇' '█' '▇' '▆' '▅' '▄' '▃' '▂') ;;
		1) frames=(' ' '▖' '▚' '▝' ' ' '▘' '▞' '▗') ;;
		2) frames=('╀' '╂' '╁' '┼' '┽' '┿' '┾' '┼' '╁' '╂' '╀' '┼' '┾' '┿' '┽' '┼') ;;
		3) frames=('─' '└' '│' '┌' '─' '┐' '│' '┘') ;;
		4) frames=('.' '。' '×' ':' '*' '.' '°' '♪' '×' '♫' '°' '♡') ;;
		5) frames=(' ' ' ' '░' '░' '▒' '▒' '▓' '▓' '█' '█' '▓' '▓' '▒' '▒' '░' '░') ;;
		6) frames=('O' 'o' '.' 'o') ;;
	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"
		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"
	return $r
}