Applescript is de programmeertaal waarmee taken in het Mac OS
kunnen worden geautomatiseerd. De taal is opgezet om goed te kunnen
lezen zodat de drempel om te beginnen laag is. Het is echter een
illusie, dat je zonder tijd en moeite scripts kunt leren schrijven.
Niets voor niets.
Er is een nederlandse site, Applescript.nl, waarop wordt beweerd dat er
"erg weinig documentatie in het nederlands" over beschikbaar is.
Vervolgens wordt je aangemoedigd om hun boek te kopen of een cursus bij
de sponsors te volgen. De bladzijde met 'links' is leeg. Dit is prima
voor professionele gebruikers, maar de beginnende hobbyist met kleine
beurs mag best wat meer hulp krijgen.
Onderaan deze pagina staan enkele (weliswaar engelstalige) sites die in ieder geval voor de beginner nuttig zijn. Tijd voor een eerste kennismaking met Applescript.
Open het programma Applescript-Editor in de map "Hulpprogramma's" en typ eens gewoon de volgende tekst in:
display dialog "Hallo, wereld!" |
Druk daarna op de knop "Voer uit" om dit script meteen uit te
voeren. Als u geen typfouten gemaakt heeft, zal er een klein nieuw
venster verschijnen met de tekst en daaronder de standaard knoppen
Annuleer en OK, in die volgorde.
Nou, dat was dan uw eerste script. Snel door naar een volgende:
display dialog "Is het nog leuk?" buttons {"Ja", "Nee"} default button 1 |
Als u wederom geen typfouten gemaakt heeft, ziet u hier het eerste voorbeeld van interactie. U heeft precies hetzelfde soort venster gemaakt als in het eerste voorbeeld, maar deze keer heeft u zelf de knoppen gedefinieerd die zichtbaar moeten worden en u heeft ook aangegeven welke knop (de eerste) u als standaard keuze beschouwd.
terug naar beginEven iets over de Applescript-editor. De script editor is het
programma waarin scripts kunnen worden ingetypt en uitgevoerd. Het
woord 'kunnen' is op zijn plaats, want het intypen van scripts kan in
principe in elk programma waarin tekst kan worden ingevoerd. Zelfs
Microsoft Word kan als tekst-editor worden misbruikt, zolang je het
resultaat maar bewaart als tekst en niet als document. Echter, een
script moet vroeg of later worden gecompileerd en uitgevoerd en dan zal
toch de Script Editor zijn kunsten moeten vertonen.
Wanneer u een script vers heeft ingetypt, staat de tekst in een soort
onopvallend paars. Zojuist hebben we steeds meteen op de knop 'voer
uit' getypt in de hoop dat het werkt, maar het verdient aanbeveling om
eerst de knop 'Compileer' te gebruiken. Het script wordt dan
gecontroleerd op syntax- en typfouten (oftewel, gecompileerd) en de
diverse onderdelen van het script (commando's en objecten) zullen dan
in verschillende opmaak worden getoond. Zo kunt u het script ontdoen
van kleine fouten en wordt het script iets prettiger leesbaar. Dit
wordt ook wel 'syntax-highlighting' genoemd.
Het uitvoeren van een script kan worden gestart met de knop
'voer uit'. Indien het script foutloos is, zal het zonder morren worden
uitgevoerd, afhankelijk van het soort script zullen invoer en uitvoer
op het scherm voorbijrollen. Na uitvoer staat de computer stil in het
programma waarin de handeling zich heeft afgespeeld.
Wanneer een script naar behoren werkt zul je het graag snel willen
uitvoeren zonder iedere keer de Applescript Editor te moeten openen en
op 'Voer uit' te klikken. Het is daarom mogelijk het script als
zelfstandig programma te bewaren. Dit kun je in principe overal
neerzetten, maar wees consequent en verzin een plek die makkelijk terug
te vinden en waar je in principe al je scripts bewaart. Een script kun
je bewaren door in het Archief menu het commando 'Bewaar als...' te
kiezen en dan aan te geven dat je het wilt bewaren als programma.
Met Applescript kunnen diverse programma's op uw Mac geautomatiseerd worden. Een van die programma's is de Finder. Hieronder een script dat alle vensters in de Finder sluit.
tell application "Finder" to close every window |
En zie eens hoe 'menselijk' deze instructie eruit ziet!
Via de "tell" instructie geeft het script de Finder de opdracht om alle
openstaande vensters te sluiten.
Op zich wordt mijn bureaublad zo wel schoon, maar ik heb geen computer om de hele dag mijn bureaublad schoon te houden. Snel naar het volgende script:
tell application "Finder" close every window open folder "Afbeeldingen" of home tell the front Finder window set toolbar visible to false set the current view to flow view set the bounds to {200, 120, 1020, 680} end tell end tell |
Dit begint ergens op te lijken. Hier worden eerst alle vensters gesloten, vervolgens wordt de map Afbeeldingen geopend in een nieuw venster en vervolgens wordt de weergave van dat nieuwe venster op Flow view gezet. Handig om door afbeeldingen te bladeren in de Finder.
terug naar beginHet volgende script kan gebruikt worden om een applicatie op te starten.
--vraag wat je op wilt starten repeat set question to display dialog ("Wat wil je starten?") default answer "" set answer to text returned of question if answer is not "" then exit repeat end if end repeat --start de gevraagde applicatie tell application (answer) activate end tell |
Met het Dock en de mogelijkheid om je map Programma's ook in het
dock te zetten lijkt dit script vrij overbodig. Echter, je kunt zo toch
vrij snel een programma starten dat nou even net niet in je Dock staat
en misschien in een submap staat.
Het volgende script kan gebruikt worden om een eenvoudige backup van een map te maken naar een andere map of schijf. Hiertoe wordt het commando 'duplicate' gebruikt.
tell application "Finder" -- eerst vragen welke map gekopieerd gaat worden set bronmap to choose folder with prompt "Kies de map die u wilt kopieren" delay 0.5 -- vragen onder welke map de kopie terecht komt set bestemming to choose folder with prompt "Kies de bestemming" duplicate bronmap ¬ to bestemming with replacing end tell |
Voor de flexibiliteit laten we het script eerst vragen welke map
gekopieerd moet worden en vervolgens waarheen. Voordeel is hierbij ook
dat er niet kan worden gekopierd naar niet-bestaande locaties. De toevoeging 'with replacing' zorgt ervoor dat een eventueel bestaande map met identieke files wordt overschreven.
Het volgende script kan gebruikt worden om een backup van een map te maken naar een externe schijf. Daartoe wordt de Unix shell van Mac OS X aangeroepen. Het is in beginsel vrij simpel, het script gaat ervan uit dat de backup schijf is aangesloten en gemount. Na de fatsoenshalve verplichte vraag om de backup te starten wordt met "do shell script" aangegeven dat de Unix shell een script moet uitvoeren. In dit geval bestaat dit script uit een enkel commando dat meteen tussen quotes wordt meegegeven.
-- vragen of backup mag display dialog "Wilt U een reservekopie maken? " & "" buttons {"Nee", "Ja"} with icon caution with title "Reservekopie" default button "Ja" if button returned of result = "Ja" then display dialog ¬ "Reservekopie bezig Dit kan enkele minuten duren." with icon note buttons {"OK"} with title "Backup" giving up after 5 -- kopie starten do shell script ¬ "rsync -aE ~/downloads /Volumes/MYSTICK/haven > ~/foutjes.txt || echo -n" -- einde backup aankondigen display dialog ¬ "Backup completed Do you want to see the log?" with icon note buttons {"No", "Yes"} with title "Backup" default button "No" if button returned of result = "Yes" then tell application "Finder" to open file "foutjes.txt" of home end if end if |
Het echte werk wordt gedaan door het rsync commando dat midden
in het
script staat geparkeerd. Hij krijgt de opdracht om de map downloads in
de home directory te kopieren naar de map haven op de schijf MYSTICK (bijv. een USB
stick).
Waarom zou je zo'n omslachtig script gebruiken als je ook de
map in een
keer naar de usb stick kunt slepen? Omdat je in principe een backup
periodiek zou willen uitvoeren (bijv. maandelijks). De eerste keer
wordt domweg de volledige inhoud gekopieerd, iedere volgende keer
worden alleen de nieuwe items in de folder gekopieerd en zal een backup
niet meer zoveel tijd in beslag nemen. Dit kan gebruikt worden om een
kopie van je volledige home directory op een backup medium te zetten
zonder dat je elke maand je volledige mediaverzameling opnieuw moet
kopieren.
Waarom open ik niet gewoon een Terminal venster en typ ik het
rsync command daarin? Omdat je een gebruiker dit typwerk wilt besparen.
Zoals beloofd nog enkele nuttige links:
Mac OS X Automation. | Erg nuttige site, die beginners op weg helpt met een eerste kennismaking met Applescript. |
MacScripter. | Site met veel voorbeeldscripts, vrij te downloaden en voor diverse toepassingen. |
Applescript.nl. | Nederlandse site over Applescript documentatie en cursussen. |
Meer weten? Ga naar de Apple
site.