ubuntuusers.de

Bash Pipes Screensaver encoding (?) Problem

Status: Gelöst | Ubuntu-Version: Xubuntu 12.04 (Precise Pangolin)
Antworten |

Laberkopf

Anmeldungsdatum:
11. Juli 2010

Beiträge: 16

Hallo Ubuntuusers,

in den Tiefen meiner SSD habe ich ein nettes Bash Script gefunden, welches den allseits bekannten Pipes Screensaver von Windows in 2d in die Shell zeichnet. Nur manchmal tauchen komische Zeichenfolgen auf.. :/ Ich verstehe das Script nur teilweise und kann es daher auch nicht selber anpassen.

 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
#!/bin/bash
declare -i  f=75 s=13 r=2000 t=0 c=1 n=0 l=0
declare -ir w=$(tput cols) h=$(tput lines)
declare -i  x=$((w/2)) y=$((h/2))
declare -ar v=(	[00]="\x83" [01]="\x8f" [03]="\x93"
		[10]="\x9b" [11]="\x81" [12]="\x93"
		[21]="\x97" [22]="\x83" [23]="\x9b"
		[30]="\x97" [32]="\x8f" [33]="\x81" )

OPTIND=1
while getopts "f:s:r:h" arg; do
	case $arg in
	f)	((f=($OPTARG>19 && $OPTARG<101)?$OPTARG:$f));;
	s)	((s=($OPTARG>4  && $OPTARG<16 )?$OPTARG:$s));;
	r)	((r=($OPTARG>0)?$OPTARG:$r));;
	h)	echo -e "Usage: pipes [OPTION]..."
		echo -e "Animated pipes terminal screensaver.\n"
		echo -e "  -f [20-100]\tframerate (D=75)."
		echo -e "  -s [5-15]\tprobability of a straight fitting (D=13)."
		echo -e "  -r LIMIT\treset after x characters (D=2000)."
		echo -e "  -h\t\thelp (this screen).\n"
		exit 0;;
	esac
done

tput smcup
tput reset
tput civis
while ! read -t0.0$((1000/$f)) -n1; do
	# New position:
	(($l%2))    && ((x+=($l==1)?1:-1))
	((!($l%2))) && ((y+=($l==2)?1:-1))

	# Loop on edges (change color on loop):
	((c=($x>$w || $x<0 || $y>$h || $y<0)?($RANDOM%7-1):$c))
	((x=($x>$w)?0:(($x<0)?$w:$x)))
	((y=($y>$h)?0:(($y<0)?$h:$y)))

	# New random direction:
	((n=$RANDOM%$s-1))
	((n=($n>1||$n==0)?$l:$l+$n))
	((n=($n<0)?3:$n%4))

	# Print:
	tput cup $y $x
	echo -ne "\033[1;3${c}m\xe2\x94${v[$l$n]}"
	(($t>$r)) && tput reset && tput civis && t=0 || ((t++))
	l=$n
done
tput rmcup

So sieht das Ergebnis mitsamt dieser Zeichenfolge aus:

https://dl.dropbox.com/u/9027237/encoding.png

track

Avatar von track

Anmeldungsdatum:
26. Juni 2008

Beiträge: 7174

Wohnort: Wolfen (S-A)

Das sind eindeutig vermurkste Escape-Sequenzen !
Das "[Esc][1:3-1m" soll wohl in Wirklichkeit "[Esc][1:31m" sein. (das stellt fett rot ein) - usw.

Du müsstest mal das Skript durchgründen, wo diese falsche "Farb"-Einstellung her kommt.
(im Skript müsste es lt. Zeile 46 die Variable $c sein. Die wird offenbar in Zeile 35 gelegentlich falsch gesetzt)

LG,

track

Vain

Avatar von Vain

Anmeldungsdatum:
12. April 2008

Beiträge: 2510

Servus,

in einem XTerm läuft das ohne Probleme, vermutlich ist es dem Autor daher nicht aufgefallen. Zumindest spuckt ein XTerm hierbei keinen Salat aus:

printf '\e[1;3-1mhallo welt\n'

Aber den von track angesprochenen Fehler gibt es wirklich:

track schrieb:

(im Skript müsste es lt. Zeile 46 die Variable $c sein. Die wird offenbar in Zeile 35 gelegentlich falsch gesetzt)

Und nicht nur da, in Zeile 40 auch. $RANDOM % $irgendwas kann ja schon 0 ergeben und dann wird noch einmal 1 abgezogen – so kommt wohl die -1 zustande. Ich würde aber nur in Zeile 35 das -1 entfernen, denn das in Zeile 40 scheint eine besondere Abfrage für n < 0 zu enthalten.

Oder übersehe ich da was? Es sollen ja die Zahlen 30 bis 37 herauskommen.

– edit: Ich würde auch noch ein tput cnorm ganz ans Ende einfügen, um den Cursor wieder sichtbar zu machen.

Laberkopf

(Themenstarter)

Anmeldungsdatum:
11. Juli 2010

Beiträge: 16

So.. jetzt wo ich (dank euch) das Script verstehe schaut es eigenlich ganz logisch aus. ☺

Problem gelöst.

Danke!

Antworten |