Automatisera OS X med Javascript
Kommer du ofta på dig själv med att göra saker du helst skulle automatisera? Har du tittat på Applescript men inte orkat lära dig språket? Använd Javascript istället.
Jobba interaktivt med Javascript
Det lättaste sättet att börja experimentera med Javascript och OS X är via en REPL, en akronym för read-eval-print-loop och uttalas "räppell". Detta kommandoradsverktyg fungerar på samma sätt som motsvarande i Python, Ruby och Node. Du matar helt enkelt in instruktioner en och en, varpå resultatet skrivs ut direkt. Öppna terminalen och skriv:
osascript -il JavaScript
Där argumentet "i" står för interaktivt och "l" (litet L) låter dig välja Javascript istället för Applescript. Prova sedan med att skriva:
Application("Safari").running()
Som svarar med true eller false beroende på om Safari körs eller inte. Detta svar är av typen boolean och det kan vi använda för ett villkorstest:
Application("Safari").running() ? console.log("Safari är öppet") : console.log("Safari är inte öppet”)
Bekanta dig med skriptredigeraren
Även om REPL-funktionen är praktisk för att experimentera blir den svårjobbad när du ska skriva längre skript. Då är det dags att öppna Skriptredigeraren som är det inbyggda verktyget i OS X för att skriva och köra skript inom Open Scripting Architecture (OSA).
När du kör igång Skriptredigeraren och skapar ett nytt skript så möts du av ett ganska avskalat gränssnitt. Det ackompanjeras av ett fönster som ger dig snabbåtkomst till dokumentationen för hur olika Apple-program kan skriptas.
Vi bygger på det vi experimenterade med i REPL-funktionen men jobbar denna gång mot Mails skriptgränssnitt. Först skapar vi ett objekt för själva skriptet som vi sedan kan använda för att visa dialogrutor:
var app = Application.currentApplication() app.includeStandardAdditions = true
Den andra raden anger att vi vill inkludera extra funktionalitet, vilket krävs för att visa dialogrutor. Därefter hämtar vi en referens till Mail:
var Mail = Application("Mail")
Därefter bygger vi samma villkorssats som i REPL-funktionen, men denna gång visar vi meddelandet i en dialogruta och anropar Mails skriptgränssnitt för att starta eller stänga applikationen:
if (Mail.running()) { app.displayAlert("Status", {"message": String("Mail körs, avslutar…")}) Mail.quit() } else { app.displayAlert("Status", {"message": String("Mail är inte igång, startar…")}) Mail.checkForNewMail() }
Notera att displayAlert-metoden tar ett objekt som andra parameter, här bestående av nyckeln "message" som innehåller en textsträng. Det här var lärorikt men inte speciellt användbart. Låt oss bygga något du faktiskt har användning för och dessutom bekanta oss med Automator.