Deze AppleScript-zelfstudie laat je zien hoe je groepen van apps instelt die in één keer kunnen worden gestart. Onderweg zullen we leren hoe lijsten, handlers, if-statements en hoe te werken met de resultaten van de acties van een gebruiker kunnen worden geïmplementeerd.
Het basisidee hierbij is dat je waarschijnlijk verschillende groepen apps hebt die je graag open hebt voor verschillende taken, bijvoorbeeld voor webdesign of schrijven. Zou het niet leuk zijn als je al deze apps gemakkelijk tegelijk kunt openen als je verschillende delen van je dag binnengaat??
We kunnen dit vrij gemakkelijk bereiken met AppleScript. Het algoritme is hier slechts vier stappen lang:
Vanuit het perspectief van de gebruiker ziet u een lijst met verschillende toepassingsgroepen op het scherm verschijnen (werk, afspelen, enz.). Je kiest de groep die je wilt lanceren, klikt op "OK" en ze worden allemaal voor je gelanceerd. Best wel gaaf
Het eerste dat we moeten doen, is onze verschillende app-groepen instellen. We gebruiken drie verschillende groepen voor deze zelfstudie: werk, spel en productiviteit, die elk een eigen lijst met apps bevatten.
In Applescript lijkt een lijst veel op een variabele, maar deze bevat meerdere afzonderlijke items in plaats van slechts één. Een lijst met de klinkers van het Engelse alfabet zou er als volgt uitzien:
[Applescript]
stel klinkerslijst in op "a", "e", "i", "o", "u", "y"
[/ Applescript]
Vanaf hier kunnen we afzonderlijke items in de lijst pakken en gebruiken. Bijvoorbeeld, het volgende geeft "e."
[Applescript]
--Retourneert "e"
stel klinkerslijst in op "a", "e", "i", "o", "u", "y"
retourneer item 2 van klinkerList
[/ Applescript]
Merk op dat veel programmeertalen "geïndexeerd" zijn, dus het eerste item in een array of lijst is eigenlijk item nul. Dit is niet het geval met AppleScript. Het eerste item in een lijst is item één.
Voor de eerste stap gaan we in totaal vier verschillende lijsten maken. De eerste drie bevatten exacte app-namen zoals ze worden weergegeven in OS X en de laatste drie bevatten de drie categorieën waarin we onze app-groepen hebben onderverdeeld: Work, Play en Productivity.
[Applescript]
--Groepen instellen
stel workGroup in op "Mail", "Safari", "TextEdit"
stel playGroup in op "Safari", "App Store", "iTunes"
stel productivityGroup in op "Notities", "Herinneringen", "Mail"
appGroups instellen op "Werk", "Spelen", "Productiviteit"
[/ Applescript]
Hier stelt de eerste coderegel een variabele in, die een lijst met toepassingsnamen bevat: Mail, Safari en Teksteditor. Ik herhaal dit proces nog twee keer voor de andere groepen.
De laatste regel code herhaalt hetzelfde proces, maar deze keer vult de lijst drie namen van in wezen willekeurige groepen die ik heb verzonnen: werk, spelen en productiviteit.
Bij codering gaat het erom grote hoeveelheden informatie te nemen en deze in gemakkelijk hanteerbare constructies te plaatsen.
Het voordeel van deze stap is dat we een a hebben gepropt ton van informatie in vier gemakkelijk terug te roepen variabelen. Bij codering gaat het erom grote hoeveelheden informatie te nemen en deze in gemakkelijk hanteerbare constructies te plaatsen. We zullen dit op een nog grotere schaal zien in de volgende stap.
Tip: Ik heb alle standaard-apps voor mijn groepen gebruikt, maar als je niet bij Mountain Lion bent, heb je geen Notes & Reminders. Wijzig de apps in de lijst in apps die u daadwerkelijk hebt geïnstalleerd.
Na het instellen van mijn variabelen, ga ik graag verder met alle handlers die moeten worden gebouwd.
In de vorige stap namen we verschillende items en plaatsten deze in een lijst om aan een enkele variabele te worden gekoppeld. Met een handler doe je iets soortgelijks en neem je een hele lijst met commando's, acties, enz. En bind je ze in een variabele.
Net als bij functies in andere talen kunnen handlers worden ingesteld om een stukje informatie te accepteren wanneer ze worden gebeld. Dit stukje informatie wordt dan 'doorgegeven' en gebruikt door de hele handler.
Hoe kunnen we weten welke acties door henzelf moeten worden aangekondigd en welke moeten worden verpakt in een handler? De vuistregel om te leven is dat als je merkt dat je een aanzienlijk stuk code meer dan eens herhaalt, het waarschijnlijk tijd is om een handler op te zetten.
Als je merkt dat je een flink aantal stukjes code meer dan eens herhaalt, is het waarschijnlijk tijd om een handler in te stellen.
Later in ons script zullen we herhaaldelijk alle apps binnen een opgegeven lijst moeten lanceren. Dit is de perfecte plaats om een handler te implementeren. De syntaxis om dit in te stellen ziet er als volgt uit:
[Applescript]
op appLauncher (selectedGroup)
einde appLauncher
[/ Applescript]
Zoals je kunt zien, is het een beetje als een tell-blok, alleen begint het met het woord 'aan' om aan te geven dat het een handler is. Hier is "appLauncher" gewoon de naam die ik heb gekozen voor mijn handler. Net als bij variabelen, bewaar deze altijd eenvoudig en beschrijvend.
Het volgende deel van deze regel staat tussen haakjes: (selectedGroup). Dit is waar we een variabele doorgeven die vervolgens door de handler kan worden geraadpleegd en verwerkt. In ons geval, wanneer we deze handler later gebruiken, geven we een van onze drie appgroepslijsten door.
Nu we een shell hebben die de grenzen van de handler bepaalt, kunnen we deze vullen met opdrachten.
[Applescript]
--App Launcher Handler
op appLauncher (selectedGroup)
herhaal met i van 1 tot (aantal items in selectedGroup)
vertel applicatie (item i van selectedGroup)
activeren
einde vertellen
einde herhalen
einde appLauncher
[/ Applescript]
Eerst maak ik een herhaling die door elk item gaat in welke lijst dan ook die we doorgeven, daarna gebruik ik elk van deze items als een variabele om als de appnaam in een tell-blok te dienen. Ten slotte start een eenvoudige "activeer" -opdracht de apps in de lijst.
Nu we onze variabelen hebben gedeclareerd en onze handler hebben ingesteld, is het tijd om te beginnen met de interactie met de gebruiker. Wat we willen doen, is een dialoogvenster maken met een lijst met opties.
Dit klinkt alsof het heel veel werk zal zijn, maar in werkelijkheid is het supereenvoudig. We hebben onze appGroups-lijst al opgezet, nu hebben we slechts een korte regel code nodig om AppleScript te laten zien dat de lijst moet worden weergegeven.
[Applescript]
--Laat de gebruiker een groep selecteren
stel deSelectie in om uit de lijst app te kiezenGroepen met de titel "Welke app-groep?"
[/ Applescript]
Hier gebruikte ik de opdracht "kiezen uit lijst" om een standaard ingebouwd dialoogvenster te openen en gebruikte "titel" om wat tekst toe te wijzen aan de bovenkant van het dialoogvenster.
Merk op dat we AppleScript niet alleen hebben verteld om de gebruiker een lijst te geven. We hebben het hele proces eigenlijk als een variabele ingesteld met de opdracht "set".
Dit is een korte en leuke manier om een dialoogvenster te maken en het resultaat allemaal in één stap te krijgen. Het dialoogvenster verschijnt, de gebruiker kiest een app-groep en het resultaat wordt toegewezen aan "theSelection" als een variabele.
Nu komt het lastige gedeelte. De gebruiker heeft het dialoogvenster gezien en gebruikt en we moeten het resultaat verwerken. Om dit te doen, moeten we letterlijk elk mogelijk scenario overwegen en er rekenschap van afleggen. Ga er nooit vanuit dat gebruikers logisch of competent zullen zijn. Neem in plaats daarvan aan dat ze elke mogelijke route nemen, met name die routes die waarschijnlijk een fout veroorzaken.
Ga er nooit vanuit dat gebruikers logisch of competent zullen zijn.
Het eerste scenario dat ik wil verklaren, is een annulering. Het venster verschijnt, de gebruiker verandert zijn / haar gedachten en drukt op Annuleren ... wat nu?
In een vorige stap gooiden we het resultaat van het venster naar deSelectie. Als de gebruiker annuleert, wordt de waarde van deze variabele ingesteld op 'false'. Deze kennis maakt het scenario eenvoudig te hanteren met een if-statement:
[Applescript]
--Als gebruiker annuleert
als deSelectie vals is dan
fout nummer -128
stop als
[/ Applescript]
Dus wat is dit fout nummer -128 bedrijf? AppleScript bevat een hele lijst met mogelijke fouten, waaraan aan elk een uniek nummer is toegewezen. Het gebeurt gewoon zo dat "geannuleerde gebruiker" -128 is.
Het enige wat we hier doen, is rapporteren wat er is gebeurd, zodat als u de resultaten van ons script in Scripteditor bekijkt, u ziet dat de gebruiker de bewerking heeft geannuleerd. Naarmate deze actie plaatsvindt, wordt het script beëindigd en verdwijnt het uit de weergave van de gebruiker, wat precies is wat we in dit geval willen, dus dit is zover als we hier gaan.
Nu komt de grote finish. Als de gebruiker de bewerking niet annuleert, moet hij / zij een van onze drie groepen hebben geselecteerd. Het is onze taak om uit te zoeken welke en dienovereenkomstig te handelen.
Voordat we deze drie scenario's lanceren, moeten we onze variabele een klein beetje verwerken. Wanneer de gebruiker een item selecteert en op "ok" klikt, wijzen we feitelijk een lijst toe aan deSelectie (het heeft maar één item, maar het is toch een lijst).
Om dit te verhelpen, overschrijft u eenvoudigweg de variabele als volgt.
[Applescript]
--Als gebruiker annuleert
als deSelectie vals is dan
fout nummer -128
anders
stel deSelectie in op item 1 van deSelectie
stop als
[/ Applescript]
Dit lijkt een beetje raar, maar als je het niet doet, zal het script een fout veroorzaken, dus vergeet deze stap niet over te slaan!
Nu we dat beetje huishoudelijk werk hebben gedaan, kunnen we doorgaan met het vergelijken van het gebruikersresultaat met de verschillende mogelijkheden. De eerste optie is dat de gebruiker de app-groep 'Werk' heeft gekozen.
In dit geval moet de variabele "theSelection" gelijk zijn aan het eerste item in onze lijst "appGroups" (ze hebben beide de waarde "Werk"). Laten we een andere if-verklaring opstellen om de waarheid van de gelijkheid te testen.
[Applescript]
--Als gebruiker annuleert
als deSelectie vals is dan
fout nummer -128
anders
stel deSelectie in op item 1 van deSelectie
--Als selectie werkgroep is
als theSelection = (item 1 van appGroups) dan
AppLauncher (-werkgroep)
stop als
stop als
[/ Applescript]
Zoals je kunt zien, als de bewering waar blijkt te zijn, gaan we onze handler van tevoren uitvoeren met 'workGroup' doorgegeven als de lijst waarmee we willen werken.
Op dit punt telt onze handler het aantal items in de werkgroep en herhaalt vervolgens een tell-blok met een "activeer" -opdracht voor elk van deze items. Hierdoor worden Mail, Safari en TextEdit met succes gestart en wordt het script beëindigd.
Met behulp van dezelfde stappen kunnen we ons script voltooien door twee "else if" -instructies toe te voegen die deSelectie vergelijken met de andere twee items in appGroups en onze handler starten met de juiste lijst als invoer.
In elk geval zal de handler doorgaan en de apps van de geselecteerde groep lanceren.
[Applescript]
--Als gebruiker annuleert
als deSelectie vals is dan
fout nummer -128
anders
stel deSelectie in op item 1 van deSelectie
--Als selectie werkgroep is
als theSelection = (item 1 van appGroups) dan
AppLauncher (-werkgroep)
--Als selectie PlayGroup is
anders als theSelection = (item 2 van appGroups) dan
AppLauncher (Playgroup)
--Als selectie productiviteit is
anders als theSelection = (item 3 van appGroups) dan
AppLauncher (productivityGroup)
anders
terugkeer
stop als
stop als
[/ Applescript]
Gevorderde gebruikerstip: Dit zijn veel if-statements om samen te proppen. Kun je deze code herschrijven met een herhalingstekst die lijkt op wat we aan het begin hebben gebruikt?
Hopelijk hebben we dat langzaam genoeg doorgenomen zodat je elk stukje van het script volledig begrijpt. Hier is een blik op het volledige script in één shot:
[Applescript]
--Groepen instellen
stel workGroup in op "Mail", "Safari", "TextEdit"
stel playGroup in op "Safari", "App Store", "iTunes"
stel productivityGroup in op "Notities", "Herinneringen", "Mail"
appGroups instellen op "Werk", "Spelen", "Productiviteit"
--App Launcher Handler
op appLauncher (selectedGroup)
herhaal met i van 1 tot (aantal items in selectedGroup)
vertel applicatie (item i van selectedGroup)
activeren
einde vertellen
einde herhalen
einde appLauncher
--Laat de gebruiker een groep selecteren
stel deSelectie in om uit de lijst app te kiezenGroepen met de titel "Welke app-groep?"
--Als gebruiker annuleert
als deSelectie vals is dan
fout nummer -128
anders
stel deSelectie in op item 1 van deSelectie
--Als selectie werkgroep is
als theSelection = (item 1 van appGroups) dan
AppLauncher (-werkgroep)
--Als selectie PlayGroup is
anders als theSelection = (item 2 van appGroups) dan
AppLauncher (Playgroup)
--Als selectie productiviteit is
anders als theSelection = (item 3 van appGroups) dan
AppLauncher (productivityGroup)
anders
terugkeer
stop als
stop als
[/ Applescript]
Nu je het volledige script hebt, sla het op als een applicatie, geef het een chique icoon en gooi het in je dock.
Als je deze tutorial met succes hebt gevolgd en alle stappen begrijpt, gefeliciteerd! Je bent absoluut een meer dan competente AppleScripter en het is tijd om zelfstandig verder te gaan en geweldige scripts te maken.
Laat hieronder een reactie achter en vertel me over de scripts die je voor je Mac hebt gebouwd. Als je nog andere ideeën voor scripts hebt die ik moet behandelen, laat het me dan weten.