AppleScript user interaction
17.05.2016
RagTime unterstützt umfangreiche Möglichkeiten zur Fernsteuerung über AppleScript. Diese Skripte erlauben auch Mitteilungen an oder Abfragen beim Anwender.
Bis OS X 10.10 kann man problemlos ein Skript wie dieses nutzen:
tell application "RagTime 6.6"
activate
set dlgResult to button returned of (display dialog "Script ausführen?" buttons {"Ja", "Nein"} default button 2)
set cell "A1" of table 1 of document 1 to dlgResult
end tell
Ab OS X 10.11 geht das nicht mehr, da RagTime Berechnungen im Hintergrund ausführt, was auch bei laufenden Skripten der Fall ist.
Hier kommt es zum Syslog:
2016-05-03 16:16:51 asl fungus RagTime[31784]: This application is modifying the autolayout engine from a background thread, which can lead to engine corruption and weird crashes. This will cause an exception in a future release. …
was in RagTime dann im Folgenden zu einem Dauerläufer führt.
Die Lösung für dieses Problem ist die Verwendung der „System Events“ für sämtliche user interactions, wie
- choose application
- choose color
- choose file
- choose file name
- choose folder
- choose from list
- choose remote application
- choose URL
- display alert
- display dialog
Hier zwei Beispiele, die einfach die Zelle A1 im ersten Rechenblatt des Dokuments verändern:
display dialog
tell application "RagTime 6.6"
activate
set dlgResult to "foo"
tell application "System Events"
activate
set dlgResult to button returned of (display dialog "Script ausführen?" buttons {"Ja", "Nein"} default button 2)
end tell
activate
set cell "A1" of table 1 of document 1 to dlgResult
end tell
choose from list
tell application "RagTime 6.6"
activate
set dlgResult to "foo"
tell application "System Events"
activate
set dlgResult to (choose from list {"Banana", "Pear", "Quince"} with title "a List" with prompt "Select an item" default items {"Quince"})
end tell
activate
if dlgResult = false then
set dlgResult to "" -- canceled
else
set dlgResult to item 1 of dlgResult
end if
set cell "A1" of table 1 of document 1 to dlgResult
end tell
Diese Beispiele zeigen, wie man die „System Events“ nutzen kann, um erfolgreich mit dem Anwender über AppleScript zu kommunizieren.