Archive for the 'Applescript' Category

Quickcommand

Posted in Applescript, Calendar on April 19th, 2006

Ein Freund der erst vor kurzem zum Mac gewechselt ist hat mich letztens gefragt ob es unter OS X nicht sowas gibt wie “Alt-F2″ bei KDE.

Ich musste das verneinen, meinte aber dass man sich sowas mit Applescript und einem Hotkeytrigger (hier wirds Geschmackssache, ich nutze für sowas Quicksilver) selber basteln kann. Herausgekommen ist dabei folgendes Script:


set theResult to display dialog "Enter command" default answer "" buttons {"Execute", "Execute with Feedback"} default button 1
set theCmd to text returned of theResult
set Exec to theCmd
if button returned of theResult is "Execute" then
do shell script Exec
else
set t to do shell script Exec
display dialog t
end if

Natürlich ist das nur eine erste Idee, und lässt sich nach Belieben verändern, anpassen, erweitern, etc…

Info vom System Profiler

Posted in Applescript, Calendar on April 7th, 2006

Je umfangreicher und detaillierter die Infos die man im Supportfalle bekommen kann sind, umso eher kommt man einem Problem auf die Schliche. Um als Admin den User mit der Problemsuche möglichst wenig zu belasten, habe ich mir mal folgendes Script zusammengebastelt, das dem User eigentlich nur noch einen einzigen Mausklick abverlangt. Und selbst den könnte man evtl. sogar noch wegrationalisieren, aber beim Versenden von Daten ist es nicht nur eine Frage der Machbarkeit/Bequemlichkeit, sondern auch des Vertrauens wenn das Senden der User anstossen muss. Ausserdem bleibt ihm so die Möglichkeit evtl. weitere Infos in die Mail zu schreiben.


set theHost to do shell script "hostname"
set theUser to do shell script "whoami"
set theCmd to "system_profiler > /Users/" & theUser & "/Desktop/sysprof.txt"
do shell script theCmd
set theAttachment to "/Users/" & theUser & "/Desktop/sysprof.txt"
set theSubject to "System Profiler | " & theHost
set theContent to "Systemprofil im Anhang"
set theSenderAdress to "sysprof@" & theHost
set theRecipient to "Admin"
set theRecipientAdress to "admin@firma.de"
tell application "Mail"
set newMessage to make new outgoing message with properties {subject:theSubject, content:theContent & return & return}
tell newMessage
set visible to true
-- set sender to theSenderAdress
make new to recipient at end of to recipients with properties {name:theRecipient, address:theRecipientAdress}
tell content
make new attachment with properties {file name:theAttachment} at after the last paragraph
end tell
activate
-- send newMessage
end tell
end tell

Das Script ruft System Profiler auf, und speichert die gesammelten Daten in die Datei “sysprof.txt”, und verschickt diese Datei dann per Mail an den Admin.
Veränderungen/Erweiterungen sind natürlich beinahe endlos möglich.

Den Artikel Info vom System Profiler

Apple Knowledge Base

Posted in Applescript, Calendar on März 12th, 2006

Ich nutze oft und ausgiebig die Apple Knowledge Base, und wollte eine einfache Möglichkeit haben schnell zu bestimmten Dokumenten zu kommen.
Also habe ich mir folgendes Script zusammengebastelt:


display dialog "Enter Knowledge Base Document Number:" default answer "" buttons {"GO", "Cancel"} default button 1
copy the result as list to {text_returned, button_pressed}
get text_returned
set theCmd to "open http://docs.info.apple.com/article.html?artnum=" & text_returned
do shell script theCmd

Das Script wird von einem Quicksilver-trigger gestartet. Für mich momentan der bequemste Weg zu den Dokumenten in der Apple Knowledge Base.

Den Artikel Apple Knowledge Base

Uninstall MMInputFamily and Drivers

Posted in Applescript, Calendar on März 10th, 2006

Ich habe so ein kleines USB-Kästchen von Terratec1 zum Fernshen via DVB-T. Zuerst habe ich es mit iTele2 und den entsprechenden Treibern betrieben, war damit aber nicht glücklich und habe mir dann EyeTV3 2.0 gekauft.
EyeTV kann aber das Kästchen nicht finden/ansprechen solange die Treiber von iTele noch aktiv im System sind.
Ich habe dann mal spasseshalber ein Uninstallscript für die Treiber geschrieben, weil es noch keinen Uninstaller gab.
Auf meinen Rechnern funktioniert er zuverlässig. Und siehe da: EyeTV findet dann auch das Terratec-Kasterl, und arbeitet einwandfrei.

DOWNLOAD

  1. 1Terratec
  2. 2iTele
  3. 3EyeTV
Den Artikel Uninstall MMInputFamily and Drivers

Terminalkommandos zusammensetzen

Posted in Applescript, Calendar on März 7th, 2006

Oft hat man Shellscripte die folgende Syntax haben:


Befehl Infile Outfile

also nach ihrem Aufruf als Parameter eine Inputdatei und eine Outputdatei erwarten, meist mit unterschiedlichen Dateiendungen.
Je nachdem wieviele Dateien umgewandelt werden sollen kann es recht lästig sein das Script x-mal aufzurufen und das Kommando anzupassen.
Hier kann man wunderbar Apple Script ins Spiel bringen. Aus genau so einer Aufgabenstellung heraus ist auch die Idee zu diesem Script entstanden.
Es ging dabei um die Umwandlung von *.dvi-Dateien in *.pdf-Dateien.1.


on SuchenUndErsetzen(derText, SuchText, Ersatztext)
set AppleScript's text item delimiters to the SuchText
set the itemListe to every text item of derText
set AppleScript's text item delimiters to the Ersatztext
set derText to the itemListe as string
set AppleScript's text item delimiters to ""
return derText
end SuchenUndErsetzen
try
tell application "Finder" to set the source_folder to (choose folder) as alias
end try
tell application "Finder"
set these_files to every file of folder source_folder -- whose name contains ".dvi"
end tell
repeat with i from 1 to the count of these_files
set this_file to (item i of these_files as string)
set this_info to info for this_file
set theDatei to this_file
set a to (POSIX path of (theDatei) as string)
-- get this_info
set SuchListe to {".dvi"}
set ErsatzListe to {"."}
set OriginalText to a
repeat with i from 1 to (count of SuchListe)
set SuchText to item i of SuchListe
set Ersatztext to item i of ErsatzListe
set OriginalText to SuchenUndErsetzen(OriginalText, SuchText, Ersatztext)
end repeat
set thePfad to OriginalText
-- get thePfad
set theSrcFile to thePfad & "dvi"
-- get theSrcFile
set theOutFile to thePfad & "pdf"
-- get theOutFile
set Befehl to "voller/Pfad/zum/script "
set Exec to Befehl & theSrcFile & " " & theOutFile
-- display dialog Exec
do shell script Exec
end repeat

Das Script muss natürlich entsprechend angepasst werden, wo es nötig ist (Dateiendungen, Pfad zum Befehl/Script).
Ausserdem empfiehlt es sich natürlich statt “do shell script” sich das Ganze erstmal per “display dialog” anzeigen zu lassen um sicher zu gehen dass man keinen Murks gemacht hat.

  1. 1Es ging dabei um die Umwandlung von *.dvi-Dateien in *.pdf-Dateien.
Den Artikel Terminalkommandos zusammensetzen

Lustig und sinnlos

Posted in Applescript, Calendar on Februar 5th, 2006

Wie der Titel schon sagt…aber nett anzusehen… Smiley


repeat 2 times
tell application "Finder"
make new Finder window
end tell
end repeat
tell application "Finder"
set bounds of Finder window 1 to {0, 0, 100, 100}
set bounds of Finder window 2 to {0, 0, 100, 100}
end tell
repeat 5 times
tell application "Finder"
activate
set position of Finder window 1 to {10, 336}
set position of Finder window 2 to {252, 275}
set position of Finder window 1 to {15, 601}
set position of Finder window 2 to {417, 338}
set position of Finder window 1 to {338, 596}
set position of Finder window 2 to {382, 132}
set position of Finder window 1 to {739, 601}
set position of Finder window 2 to {792, 115}
set position of Finder window 1 to {750, 352}
set position of Finder window 2 to {750, 352}
set position of Finder window 1 to {792, 115}
set position of Finder window 2 to {739, 601}
set position of Finder window 1 to {382, 132}
set position of Finder window 2 to {338, 596}
set position of Finder window 1 to {417, 338}
set position of Finder window 2 to {15, 601}
set position of Finder window 1 to {252, 275}
set position of Finder window 2 to {10, 336}
end tell
end repeat
tell application "Finder"
set bounds of Finder window 1 to {200, 200, 400, 300}
set bounds of Finder window 2 to {200, 250, 300, 400}
end tell

Den Artikel Lustig und sinnlos

Viele Dateien an viele Empfänger per Mail

Posted in Applescript, Calendar on Februar 5th, 2006

Eine interessante Aufgabenstellung.
Wird in diesem Thread bei macuser.de besprochen.

Den Artikel Viele Dateien an viele Empfänger per Mail

Remote dialog

Posted in Applescript, Calendar on Februar 5th, 2006

Update (27.07.2008):
Seit 10.5. (auf der Hostmaschine) scheint diese Mehtode nicht mehr zu funktionieren da weder die Application “System Events” noch die Application “Finder” die “do shell script” Befehle ausführen.
Durchaus ein Sicherheitsplus da jetzt nicht ohne weiteres Code auf einer fremden Maschine ausgeführt werden kann. Möglicherweise funktioniert es auf Notificationmechanismen wie z.B. Growl auszuweichen.

Seit Applescript Version 1.10 ist es nicht mehr möglich folgende interaktive Elemente die einen Dialog präsentieren auf einer entfernten Maschine auszuführen:
- choose application
- choose from list
- choose URL
- display dialog

So klappts trotzdem:


set remMachine to "eppc://User:Pass@Host"
tell application "System Events" of machine remMachine to do shell script "osascript -e 'tell Application \"Finder\" to display dialog \"Hallo\"'"

Newfilehere

Posted in Applescript, Calendar on Februar 5th, 2006

Viele vermissen in OS X die Möglichkeit im aktuellen Verzeichnis eine leere Datei anlegen zu können.
Folgendes Script schafft Abhilfe:


-- Abfrage Dateiname
set theResult to display dialog "Dateiname" default answer ""
set Dateiname to text returned of theResult
-- Abfrage Dateiendung
set theResult to display dialog "Endung" default answer ".txt"
set Dateiendung to text returned of theResult
-- Bestimmung in welchem Ordner die Datei erstellt werden soll
tell application "Finder"
-- falls unklar wird die Datei auf dem Desktop erstellt
set theText to POSIX path of ((path to desktop folder) as alias)
-- Falls ein Fenster offen ist
if exists front window then
-- wird der Pfad zu diesem abgefragt
set theText to POSIX path of (target of front window as alias)
end if
end tell
set t to theText
-- der Terminalbefehl
set Befehl to "touch "
-- der Dateiname
set Dname to Dateiname
-- die Dateiendung
set Endung to Dateiendung
-- die gesamte Datei
set Datei to Dname & Endung
-- der Pfad zum Ordner
set Pfad to t
-- Zusammenbau des kompletten Befehls
set Exec to Befehl & Pfad & Datei
-- Übergabe des Befehlsstrings an den Terminal
do shell script Exec

Das Script am besten als Programm speichern (nur ausfürbar, kein Startdialog) und dann in die Symbolleiste des Finders ziehen, schon hat man in jedem Finderfenster die Möglichkeit eine leere Datei zu erstellen.

Server ready

Posted in Applescript, Calendar on Januar 25th, 2006

Im Artikel Remotetunes habe ich den headless laufenden Mac-mini erwähnt der bei mir v.a. als iTunes-server dient. Ab und zu schalte ich den Rechner mal aus, ist ja kein Hochverfügbarkeitsserver. Ich fand es allerdings doch immer etwas lästig nicht zu wissen ob v.a. Mail (das ich z.T. zur Fernsteuerung des Rechners nutze) und iTunes schon gestartet sind. Also kommt auf dem Server folgendes kleines Script zum Einsatz (als Programm gespeichert und in die Startobjekte gepackt):


tell application "Finder"
process "Mail" exists
if true then
set theMailinfo to "Mail running"
else
set theMailinfo to "Mail not running"
end if
process "iTunes" exists
if true then
set theiTunesinfo to "iTunes running"
else
set theiTunesinfo to "iTunes not running"
end if
end tell
set remMachine to "eppc://User:Passwort@Zielrechner"
using terms from application "Quicksilver"
tell application "Quicksilver" of machine remMachine
show large type "Rechnername is up with " & theMailinfo & " and " & theiTunesinfo
end tell
end using terms from

So erfahre ich auf meinem Arbeitsrechner ganz bequem wenn der Server so weit ist um Befehle zu empfangen.
Nebenbei stösst der Server noch ein Automountscript auf dem Arbeitsrechner an dass mir alle momentan bereitgestellten Volumes mountet.