/
zzss.sh
143 lines (127 loc) · 3.03 KB
/
zzss.sh
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
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
# ----------------------------------------------------------------------------
# Protetor de tela (Screen Saver) para console, com cores e temas.
# Temas: mosaico, espaco, olho, aviao, jacare, alien, rosa, peixe, siri.
# Obs.: Aperte Ctrl+C para sair.
# Uso: zzss [--rapido|--fundo] [--tema <tema>] [texto]
# Ex.: zzss
# zzss fui ao banheiro
# zzss --rapido /
# zzss --fundo --tema peixe
#
# Autor: Aurelio Marinho Jargas, www.aurelio.net
# Desde: 2003-06-12
# Versão: 1
# Licença: GPL
# Requisitos: zzaleatorio zztrim
# Tags: screen saver, emulação
# ----------------------------------------------------------------------------
zzss ()
{
zzzz -h ss "$1" && return
local mensagem tamanho_mensagem mensagem_colorida
local cor_fixo cor_muda negrito codigo_cores fundo
local linha coluna dimensoes
local linhas=25
local colunas=80
local tema='mosaico'
local pausa=1
local temas='
mosaico #
espaco .
olho 00
aviao --o-0-o--
jacare ==*-,,--,,--
alien /-=-\\
rosa --/--\-<@
peixe >-)))-D
siri (_).-=''=-.(_)
'
# Tenta obter as dimensões atuais da tela/janela
dimensoes=$(stty size 2>/dev/null)
if test -n "$dimensoes"
then
linhas=${dimensoes% *}
colunas=${dimensoes#* }
fi
# Opções de linha de comando
while test $# -ge 1
do
case "$1" in
--fundo)
fundo=1
;;
--rapido)
unset pausa
;;
--tema)
test -n "$2" || { zztool -e uso ss; return 1; }
tema=$2
shift
;;
*)
mensagem="$*"
unset tema
break
;;
esac
shift
done
# Extrai a mensagem (desenho) do tema escolhido
if test -n "$tema"
then
mensagem=$(
echo "$temas" |
grep -w "$tema" |
zztrim |
cut -f2
)
if ! test -n "$mensagem"
then
zztool erro "Tema desconhecido '$tema'"
return 1
fi
fi
# O 'mosaico' é um tema especial que precisa de ajustes
if test "$tema" = 'mosaico'
then
# Configurações para mostrar retângulos coloridos frenéticos
mensagem=' '
fundo=1
unset pausa
fi
# Define se a parte fixa do código de cores será fundo ou frente
if test -n "$fundo"
then
cor_fixo='30;4'
else
cor_fixo='40;3'
fi
# Então vamos começar, primeiro limpando a tela
clear
# O 'trap' mapeia o Ctrl-C para sair do Screen Saver
( trap "clear;return" 2
tamanho_mensagem=${#mensagem}
while :
do
# Posiciona o cursor em um ponto qualquer (aleatório) da tela (X,Y)
# Detalhe: A mensagem sempre cabe inteira na tela ($coluna)
linha=$(zzaleatorio 1 $linhas)
coluna=$(zzaleatorio 1 $((colunas - tamanho_mensagem + 1)))
printf "\033[$linha;${coluna}H"
# Escolhe uma cor aleatória para a mensagem (ou o fundo): 1 - 7
cor_muda=$(zzaleatorio 1 7)
# Usar negrito ou não também é escolhido ao acaso: 0 - 1
negrito=$(zzaleatorio 1)
# Podemos usar cores ou não?
if test 1 = "$ZZCOR"
then
codigo_cores="$negrito;$cor_fixo$cor_muda"
mensagem_colorida="\033[${codigo_cores}m$mensagem\033[m"
else
mensagem_colorida="$mensagem"
fi
# Mostra a mensagem/desenho na tela e (talvez) espera 1s
printf "$mensagem_colorida"
${pausa:+sleep 1}
done )
}