Archiv

Hier lege ich meine alten Geektoolskripte ab. Mein Bildschirm "lebt" und ich verändere immer wieder etwas. Damit die alten Skripte aber nicht verschwinden archiviere ich sie. Allerdings werden sie auch nicht mehr von mir weiter gepflegt.

 

Die Wetteranzeige basiert auf dem Design von Frenchy Quentin (Link). Daher werde ich die Skripte hier nicht näher erklären. Ich habe es aber wieder modifiziert, damit ich die Wetterbeschreibung auf Deutsch sehe.

Grundsätzlich ruft das Skript die Wetterinformationen bei Yahoo ab. Yahoo bietet über das Developer Network das aktuelle Wetter als RSS Feed. Hier (Link) findet Ihr genauere Informationen zu diesem Feed.

In meiner Modifikation belege ich die Variable "descr" nicht mit der Beschreibung aus dem RSS Feed. Ich lese nur den Wettercode aus und belege "descr" über eine Funktion mit dem entsprechenden deutschen Begriff. Die Funktion habe ich CodeText genannt.

Hier die Details: 

01: CodeText() {
02: case "$1" in
03: 0) printf "Tornado"
04: ;;
05: 1) printf "tropischer Sturm"
06: ;;
07: 2) printf "Hurricane"
08: ;;
09: esac;
10: }

Zeile 1:
Eröffnung der Funktion "CodeText".

Zeile 2:
Um nicht unzählige "if-then" Abfragen schreiben zu müssen, habe ich mich für einen "case switch" entschieden. Beim Aufruf von "CodeText" wird der Wettercode übergeben. Dieser kann dann über "$1" innerhalb der Funktion weiterverarbeitet werden.

Zeile 3:
Vor der Klammer steht der mögliche Wert für "$1" und dahinter die auszuführende Anweisung.

Zeile 4:
Der Anweisungsblock endet mit ";;"

Zeile 5 bis 8:
Für jeden möglichen Wert (es sind fast 50) von "$1" habe ich eine Anweisung in den case switch eingetragen.

Zeile 9:
Der case switch wird beendet.

Zeile 10:
Ende der Funktion "CodeText"

 

Innerhalb des Skriptes habe ich die "descr=" Anweisungen von Frenchy Quentin durch die Zeile

descr=$(CodeText $code);

ersetzt. Davor wurde natürlich die Variable "$code" mit dem entsprechenden Wettercode aus dem RSS Feed belegt.

 

Ich lasse mir meine Termine aus iCal für heute und morgen anzeigen. Diese werden nach Kalendern sortiert. Außerdem sehe ich unter der gestrichelten Linie auch den abonnierten Spielplan des Schauspiels Essen.

Um über die Kommandozeile an die iCal Daten zu kommen, muss man ein Freewaretool namens iCalBuddy installieren. Danach kann man mit folgendem Skript die Daten auslesen:

01: GEBURTSTAGSCAL="7F7992A6-2CD5-47EE-91B1-4D2D87FEF9B5"
02: GEBURTSTAGSCALOWNCLOUD="E8B1C94C-4ED1-4CB5-B2F9-85EF986A2766"
03: SPIELPLANCAL="265645B8-AC99-4C41-AE35-DFDE989490A6"
04: echo Heute:
05: echo
06: varbirthtoday=`/usr/local/bin/icalBuddy -ic $GEBURTSTAGSCAL -nc -iep title eventsToday`
07: if [ "$varbirthtoday" != "" ]
08: then
09: echo "$varbirthtoday"
10: echo
11: fi
12: vartoday=`/usr/local/bin/icalBuddy -ec $GEBURTSTAGSCAL,$GEBURTSTAGSCALOWNCLOUD,$SPIELPLANCAL -iep title,datetime eventsToday`
13: if [ "$vartoday" != "" ]
14: then
15: echo "$vartoday"
16: else
17: echo "--- Keine Termine ---"
18: fi
19: echo
20: echo 
21: echo Morgen:
22: echo 
23: varbirthtomorrow=`/usr/local/bin/icalBuddy -ic $GEBURTSTAGSCAL -nc -iep title eventsFrom:today+1 to:today+1`
24: if [ "$varbirthtomorrow" != "" ]
25: then  
26: echo "$varbirthtomorrow"
27: echo
28: fi
29: vartomorrow=`/usr/local/bin/icalBuddy -ec $GEBURTSTAGSCAL,$GEBURTSTAGSCALOWNCLOUD,$SPIELPLANCAL -iep title,datetime eventsFrom:today+1 to:today+1`
30: if [ "$vartomorrow" != "" ]
31: then
32: echo "$vartomorrow"
33: else
34: echo "--- Keine Termine ---"
35: fi
36: echo
37: echo
38: echo ——————————————————————————————————————————————————
39: echo Heute im Grillo:
40: echo
41: vargrillo=`/usr/local/bin/icalBuddy -ic $SPIELPLANCAL -nc -iep title,location,datetime eventsToday`
42: if [ "$vargrillo" != "" ]
43: then
44: echo "$vargrillo"
45: else
46: echo "--- Keine Vorstellungen ---"
47: fi

Zeile 1 bis 3: 
iCal vergibt für jeden Kalender eine UID. Damit ich nicht immer mit diesen Zeichenfolgen arbeiten muss, belege ich diese drei Variablen mit den entsprechenden Werten.

Zeile 6 bis 11:
Der Geburtstagskalender für heute wird abgefragt und wenn es einen Eintrag gibt, wird er angezeigt.

Zeile 12 bis 18:
Die Termine für heute werden abgefragt (außer im Geburtstagskalender, Geburtstagskalender der Owncloud und Spielplan des Theaters) und angezeigt.

Zeile 23 bis 28:
Der Geburtstagskalender für morgen wird abgefragt und wenn es einen Eintrag gibt, wird er angezeigt.

Zeile 29 bis 35:
Die Termine für morgen werden abgefragt und angezeigt.

Zeile 41 bis 47:
Der abonnierte Spielplan des Theaters wird abgefragt und angezeigt.

Angezeigt werden alle ungelesenen eMails aus Apple Mail. Die Anzeige erfolgt jedoch nur, wenn Apple Mail geöffnet ist. Wenn ich am Rechner sitze, lasse ich Mail meistens ausgeblendet im Hintergrund laufen. Das eigentliche Geektool Skript ist recht kurz. Der Zugriff auf Apple Mail aus Geektool ist nicht möglich. Deshalb ruft Geektool ein Applescript auf, welches die Abfrage nach neuen Mails erledigt.

Das Geektool Skript:

01: mails=`osascript ~/Geektool/CheckNewMail.scpt`
02: if [ "$mails" != "" ]
03: then
04: echo "MAIL:"
05: echo
06: echo "$mails"
07: fi

Zeile 1:

Die Variable "mails" wird mit den Ergebnissen des Applescriptes "CheckNewMail.scpt" belegt. 

Zeile 2 bis 7:

Wenn die Variable "mails" nicht leer ist, erfolgt eine Ausgabe.

 

So sieht das Applescript aus:

01: set newline to ASCII character 10
02: tell application "System Events" to set iCalIsRunning to (name of processes) contains "Mail"
03: set finalText to ""
04: if iCalIsRunning then
05: tell application id "com.apple.mail"
06: set unreadCount to (get unread count of inbox)
07: if unreadCount > 0 then
08: set theMessages to (messages of inbox whose read status is false)
09: repeat with i from 1 to number of items in theMessages
10: set thisMessage to item i of theMessages
11: set fromMsg to (sender of thisMessage as string)
12: set subjMsg to (subject of thisMessage as string)
13: set accMsg to (name of account of mailbox of thisMessage)
14: set accMsg to "Account: " & accMsg & newline
15: if subjMsg = "" then
16: set subjMsg to newline & "   " & "KEIN BETREFF" & newline
17: else
18: set subjMsg to newline & "   Betreff: " & subjMsg & newline
19: end if
20: set finalText to finalText & i & ". " & accMsg & "   " & fromMsg & subjMsg & newline
21: end repeat
22: else
23: set finalText to "   - - Keine neue Email - -"
24: end if
25: end tell
26: else
27: set finalText to ""
28: end if
29: finalText

Ich kenne mich mit Applescript nicht wirklich aus. Dieses hier habe ich im Netz gefunden und für meine Zwecke modifiziert. 

Zeile 3:
Die Variable "finalText" wird initialisiert. Sie enthält nachher den Text, der an das Geektool Skript übergeben wird.

Zeile 6:
Die Anzahl der ungelesenen Mails wird ermittelt und der Variablen "unreadCount" übergeben.

Zeile 9 bis 13:
Aus der ungelesenen Nachricht werden Absender, Betreff und Name des eMailaccounts ausgelesen und in entsprechenden Variablen abgelegt.

Zeile 14:
Die Variable für den Accountnamen wird um den Begriff "Account:" und einen Zeilensprung erweitert.

Zeile 15 bis 19:
Wenn die Betreffzeile der Mail leer ist, wird die Variable "subjMsg" mit "KEIN BETREFF" belegt. Des Weiteren werden auch hier Zeilensprünge eingefügt.

Zeile 20:
Die Variable "finalText" wird um die gefundenen Informationen erweitert.

Zeile 9 und 21:
Die Arbeitsschritte zwischen diesen Zeilen, werden für jede ungelesene Mail wiederholt.