macfidelity

|

Apple | Mac OS X | AppleScript | Hints | Applications and more

Getting Started mit AppleScript (Lektion II – Working with comments and dialogs)

July 13th, 2008 at 14:55

Im ersten Teil der Serie Getting started mit AppleScript wurde das klassische Hello World in wenigen Schritten erklà¤rt.

In diesem Teil will ich den Umgang mit Display Dialog in Applescript etwas nà¤her erlà¤utern und nebenbei den Umgang mit Kommentaren erklà¤ren.

Fangen wir mit den Kommentaren an.

Ein Kommentar in Programmier / Script Sprachen dient im Kern der spà¤teren Nachvollziehbarkeit von Code. Klingt eventuell jetzt fà¼r euch unsinnig, weil ist ja der eigene Code und so, aber jeder der nach Monaten mal wieder eigenen Code à¼berarbeiten wollte wird mir zustimmen das dies ohne Kommentare kompliziert werden kann. Oft endet es in Fragen wie:

Was zum Henker habe ich mir damals mit diesen Zeilen gedacht ?.

Um dies zu verhindern hier der Einsteig ins Kommentieren. à€“ffnet hierzu die Datei:

macfidelity_applescript_lektion1.scpt

im Script Editor. Das ganze sollte in etwa so aussehen:

Nun fà¼gen wir mal einen einzeiligen Kommentar ein, der den Script-Ersteller hinterlegt.

Das unkompilierte Ergebnis solle in etwa so aussehen:

Durch die Betà¤tigung des Knopfes “Compile” wird das Script wieder umgesetzt und sofern wir keine Fehler eingebaut haben auch lauffà¤hig.

Kommentare werden im Script Editor ebenso mit einer eigenen Farbe dargestellt, in diesem Fall in grau.

Einzeilige Kommentare werden also mit “–” angefangen. Ihr kà¶nnt natà¼rlich beliebig viele einzeilige Kommentare am Stà¼ck verwenden wie der folgende Screenshot zeigt:

Neben einzeiligen Kommentaren existieren natà¼rlich auch mehrzeilige Kommentare in AppleScript.

Persà¶nlich ziehe ich einzeilige Kommentare vor und verwende bei Bedarf dann einfach eine Reihe einzeiliger am Stà¼ck sofenr notwendig (siehe Linie 1 & 2 im Beispiel). Dies ist aber nur eine Stilfrage und ich mags optisch einfach einheitlich.

Wenden wir uns dem Umgang mit Display Dialog zu:

Bis dato haben wir Diaply Dialog verwendet um ein Default Dialog Fenster zu erhalten. Dieses Default Dialog Fenster hat vordefinierte Eigenschaften, z.b. die 2 Buttons “OK” und “Cancel”. Natà¼rlich kann man einen Display Dialog auch anpassen, z.b. mit einem Titel, Anzahl Buttons, Dialog Titel, Anzeigedauer, Icon Verwendung etc…

Als erstes wollen wir wir den Dialog mit einem Namen versehen, dafà¼r benà¶tigen wir folgenden Code:

display dialog “Verstehen Sie AppleScript schon ein bisschen ?” with title “Display Dialog”

Dies sollte im Script Editor im kompilierten Zustand wie folgt aussehen:

Und im ausgefà¼hrten Zustand so:

Ok. eigentlich ganz simpel. nun wollen wir aber eigentlich andere Button-Texte haben, daher à¤ndern wir dies auch noch ab.

Wir ergà¤nzen den alten Code wie folgt:

display dialog “Verstehen Sie AppleScript schon ein bisschen ?” buttons {“Ja”, “Nein”, “à€žhm Jein”} with title “Working with Display Dialogs”

Und erhalten einen Display Dialog, mit eigens definiertem Titel und 3 eigens definierten Buttons. Das ganze sieht so aus:

Beziehungsweise ausgefà¼hrt so:

Bei der Verwendung merken wir jedoch dass wir z.b einen Button als Default Antwort vorselektieren wollen. Dies macht Sinn, da somit die Vorgabe relativ zà¼gig mit   dem Return Knopf zu treffen ist und die vorgabe fà¼r den Nutzer visuell ersichtlich ist.

Dafà¼r ergà¤nzen wir den Code erneut:

display dialog “Verstehen Sie AppleScript schon ein bisschen ?” buttons {“Ja”, “Nein”, “à€žhm Jein”} default button {“à€žhm Jein”} with title “Working with Display Dialogs”

Das Script sollte im Script Editor wie folgt aussehen:

Und ausgefà¼hrt so:

Manchmal will man jedoch einen Dialog nicht unendlich lange anzeigen, sondern mittels Vorhgabe definieren wie lange er maximal angezeigt wird.

Dies liesse sich so bewerkstelligen:

display dialog “Verstehen Sie AppleScript schon ein bisschen ?” buttons {“Ja”, “Nein”, “à€žhm Jein”} default button {“à€žhm Jein”} with title “Working with Display Dialogs” giving up after 3

Konkret wà¼rde unser Dialog nun nach 5 Sekunden verschwinden. Relativ kurze Zeit, aber gerade zu Testwecken recht angenehm … wer will jeweils schon 30 Sekunden warten, wenn es nur ums testen geht.

War doch bisher alles relativ einfach. nun was bringen uns Dialoge mit Buttons wenn wir nicht die Antwort des Anwenders auslesen und interpretieren… kurzum eine Folge einbinden.

Wir wollen nun je nach selektiertem Button einen unterschiedlichen Folgedialog anzeigen.

Dafà¼r mà¼ssen wir nun erstmal den Code wieder anpassen:

display dialog "Verstehen Sie AppleScript schon ein bisschen ?" buttons {"Ja", "Nein", "à€žhm Jein"} default button {"à€žhm Jein"} with title "Working with Display Dialogs" giving up after 5
--
-- antwort aufnehmen und verarbeiten
set DlogResult to result
--
if button returned of result = "Ja" then
display dialog "Ja gedrà¼ckt"
else if button returned of result = "Nein" then
display dialog "Nein gedrà¼ckt"
else if button returned of result = "à€žhm Jein" then
display dialog "à€žhm Jein gedrà¼ckt"
else
display dialog "Timeout"
end if

Im Script Editor sollte dies wie folgt aussehen:

Aufklà¤rung zum aktuellen Zeitpunkt:

Unser Script zeigt einen Dialog mit angepasten 3 Buttons, einem Titel fà¼r das Fenster, einem vordefinierten Default Button, einer vordefinierten Anzeige-Dauer und einer Routine die prà¼ft was selektiert wurde. Hierfà¼r wurde ein IF-Konstruktion verwendet, welche ich hier nur kurz streife. Denke Schleifen etc sind ein eigenes Thema in AppleScript.

Abschliessend das komplette Script nochmal mit Kommentaren:


-- Autor: fidel
-- Date: 20080713
--
-- Display Dialog mit Title fà¼r Dialog Fenster
display dialog "Verstehen Sie AppleScript schon ein bisschen ?" buttons {"Ja", "Nein", "à€žhm Jein"} default button {"à€žhm Jein"} with title "Working with Display Dialogs" giving up after 3
--
-- antwort aufnehmen und verarbeiten
set DlogResult to result
-- Anfang IF
--
-- Wurde ja gedrà¼ckt ?
if button returned of result = "Ja" then
-- Bestà¤tigungsdialog
display dialog "Ja gedrà¼ckt"
-- wurde Nein gedrà¼ckt ?
else if button returned of result = "Nein" then
-- Bestà¤tigungsdialog
display dialog "Nein gedrà¼ckt"
-- wurde à€žhm Jein gedrà¼ckt ?
else if button returned of result = "à€žhm Jein" then
-- Bestà¤tigungsdialog
display dialog "à€žhm Jein gedrà¼ckt"
-- d.h. keiner der 3 Buttons wurrde gedrà¼ckt
else
-- timeout Dialog
display dialog "Timeout"
end if
--
-- ENDE IF

Das ganze wird jetzt gespeichert:

So, hoffe das ganze war nachvollziehbar und interessant fà¼r den einen onder anderen. Wie schon beim ersten Beitrag gilt auch hier: bei Fragen einfach melden.

Der nà¤chste Beitrag in dieser Kategorie wird sich erneut dem Display Dialog widmen und ich denke dann ist das Thema auch fà¼r den Einsteig ausreichend abgefeiert.

Links:

Tags: , , , , , , , ,

20 Responses to “Getting Started mit AppleScript (Lektion II – Working with comments and dialogs)”

  1. RS Says:

    danke
    war sehr hilfreich
    ich selber kam noch nich so richtig zu recht
    danke

  2. fidel Says:

    hi,

    freut mich dass ich helfen konnte.
    Was bastelst du den aktuell ? wo liegen die Probleme ?

    gruss
    fidel

  3. RS Says:

    aber kannst du/wer immer noch erklaeren wie man script endes-programmiert

  4. RS Says:

    also ich wollte eigentlich nur so ein bisschen alle programme von mac ausprobieren
    ausserdem kann man sprachbefehle selber einstellen, aber man muss die aktionen in ein apple-script schreiben
    und daher wollte ich script lernen, sodass ich nicht immer die aktionen aufnehmen muss

  5. RS Says:

    hey brauchst nich mehr anworten
    script-ende habe ich rasgefuneden
    aber kannst du nicht mal andere sachen als dialogs+aktionen erklaeren
    das hab ich jetzt verstanden
    nur eine sache
    ich hab einen if-befehl von ueber einer zeile laenge
    aber dann liest er nicht mehr das “then” und laesst den befehl aus
    und wie kann ich text auswerten?

  6. fidel Says:

    hi
    Sorry erst jetzt die ganze comment flut gesehen =)

    poste mal deinen code dann sollten wir das gelöst bekommen.

    bzgl was anderes wie dialog & aktion…gib einfach mal bescheid wass dich interessiert. Ich wollte die tage eigentlich mal umgang mit texten etc durchkauen hehe.

    gruss
    fidel

  7. RS Says:

    nene
    eigentlich interressiert mich jetzt was andres
    naemlich nehmen wir an ich hab folgendes applescript
    display dialog “Hi” buttons {“Hi”} default button 1 with title “Hi” giving up after 3
    if button returned of result = “Hi” then
    display dialog “Howdy?” buttons {“Great”, “Ok”, “Not so good”} default button 1 with title “Howdy”
    if button returned of result = “Great” then
    display dialog “What are you doing right now?” buttons {“Nothing in particular”, “Answering dumb dialogs”, “Listening to music”} default button 1 with title “Current activity”
    if button returned of result = “Nothing in particular” then
    display dialog “Well, that sounds very interesting.” buttons {“You’re not funny”,
    else if button returned of result = “Answering dumb dialogs” then …

    else

    else if button returned of result = “Ok” then
    display dialog “Why” buttons {“’cause I’ve godda answer stupid dialogs”, “’cause it’s cold”, “I dunno”} default button 3 with title “Why”
    else

    else

    end if
    is jetzt ziemlich banal
    aber ich will bei dem ersten dialog also “hi” moechte ich wenn er hi antwortet eine datei oeffnen die jetzt einfach mal den pfad [Macintosh HD/all users/RS/documents/hi] hat, dann habe ich aus apple-script erschliessen koennen, dass ich dem programm ,vorschau, sagen muss, dass ich die datei oeffnen will, also:
    tell application “Vorschau/Preview”
    open …
    aber da komm ich nich weiter
    er sagt mir naemlich wenn ich den pfad einfuege, dass er etwas andres erwartet
    check ich nich so richtig ;)
    noch eine frage: wenn ich die datei als .app speichere, wie aendere ich dann das Icon?

  8. RS Says:

    aber das auswerten von texten aus dialogen waere noch interressant

  9. fidel Says:

    hi bzgl icons:
    im kern gibt es 2 Möglichkeiten.
    Variante 1: das allgemeine ändern von Icons eines Programmes
    Variante 2: das definieren eines appIcons im Rahmen der Programm Erstellung.

    Ich erklär mal fix Variante 1, da die allgemeiner und immer brauchbar ist

    1. Selektiere dein .app file
    2. Rechtsklick -> Information / Get Info im Kontext Menü drücken
    3. Neues Icon im Finder selektieren (gibt gute Icons auf Interfacelift (weitere links siehe mein englisches howto weiter unten)
    4. Rechtsklick-> INformation / Get info
    Nun solltest du 2 Informations Dialoge vor dir haben, einerseits von deinem APP und andererseits von deinem Wunsch Icon.
    5. Selektiere nun im Informationsdialoges deines wunschicons ganz oben das Icon selber und drücke APPLE+C um dieses zu kopieren. Das icons sollte im markierten Zustand blau umrandet sein
    6. Nun wechsle in den Informationsdialog deines .APP, selektiere auch dort das icon oben (muss wieder blau umrandet sein) und drücke APPLE+ V

    Damit sollte dein .APP ein neues Icon haben. Dies geht im Kern mit allen Files.

    hier noch mal in englisch:
    http://www.macfidelity.de/blog/2007/03/14/customize-os-x-or-howto-change-icons-in-ox-x/

  10. fidel Says:

    bzgl:

    aber das auswerten von texten aus dialogen waere noch interressant

    Meinst du das reine auswerten von den möglichen Knöpfen ?
    Oder ein Dialog-Feld inkl. Textfeld in dem der User einen Text eingeben kann ?

    Gruss
    fidel

  11. fidel Says:

    @RS: denke ich werde morgen noch Teil 3 bzgl. Umgang mit Dialogen machen (inkl Dialog-Fenstern mit Textfeldern) und dann anschliessend mal in Teil 4 den Umgang mit Strings anvisieren.

    Schà¶ne Grà¼ÃƒÅ¸e
    fidel

  12. RS Says:

    dialog feld mit text faende ich interessant, weil ich bisher nur mit if-formeln vorankomme und das nur sehr schleppend…
    ich weiss z.b. nicht, wie ich pruefen kann, ob der text enthalten ist…

  13. fidel Says:

    geht klar …. werd ich morgen mal einbauen =)

  14. RS Says:

    noch zu den icons
    wie kann ich eigene icons erstellen
    kann ich einfach bilder nehmen?

  15. fidel Says:

    bzgl Icons:
    also ich verwende eigentlich immer frei verfügbare Icons (als .icns), aber ja du kannst auch selber welche erstellen.
    Ein relativ simples Tool sollte hier IMG2ICNS sein.

    http://www.shinyfrog.net/en/software/img2icns/

    habe ich auch in diesem Beitrag erwähnt:
    http://www.macfidelity.de/blog/2007/12/12/mac-create-icons-out-of-your-images-using-img2icns/

    hoffe das hilft weiter

  16. Getting Started mit AppleScript (Lektion III - Working with dialogs & answers) | macfidelity Says:

    [...] wir nun mit den Mitteln aus Lektion II einen Dialog mit 2 [...]

  17. fidel Says:

    @RS: heute kam Teil 3 der Serie – Sollte einige deiner Fragen beantworten. Viel Spass beim ausprobieren. Wenn nicht frag einfach oder warte auf Teil 4 =)

    gruss
    fidel

  18. fidel Says:

    bzgl dem öffnen von Dateien – Wenn ich z.b. eine Datei a.jpg auf meinem Desktop öffnen will kann ich das so erreichen:
    —-
    tell application “Finder”
    activate
    open file “MacOSX:Users:fidel:Desktop:a.jpg”
    end tell
    —-
    Wichtige stichwörter hier sind dann ggf. try/end try sowie das wissen dass es mind. 2 Varianten der Pfadangaben in Applescript gibt. Obige und die posix variante.

    Werde das irgendwann mal im Detail erklären, im Rahmen der Kommentare ist dass nicht umfassend möglich.

  19. Getting Started mit AppleScript (Lektion V - Read from File) | macfidelity Says:

    [...] Lektion II – Working with comments and dialogs [...]

  20. Getting Started mit AppleScript (Lektion IV - Working with text) | macfidelity Says:

    [...] Lektion II – Working with comments and dialogs [...]

Leave a Reply

XHTML: You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>