Avvia le tue app preferite in gruppi con AppleScript

Questo tutorial di AppleScript ti mostrerà come impostare gruppi di app che possono essere lanciati tutti in una volta. Lungo la strada impareremo come implementare liste, gestori, se le istruzioni e come lavorare con i risultati delle azioni di un utente.

Cosa stiamo costruendo

L'idea di base è che probabilmente hai diversi gruppi di app che ti piacerebbe avere aperto per compiti diversi, ad esempio per il web design o la scrittura. Non sarebbe bello se tu potessi aprire facilmente tutte queste app contemporaneamente mentre vai in diverse parti della tua giornata?

Possiamo farlo abbastanza facilmente con AppleScript. L'algoritmo qui è lungo solo quattro passaggi:

  1. Imposta vari gruppi di app
  2. Consenti all'utente di scegliere da un elenco di gruppi di app
  3. Prendi il risultato della selezione dell'utente
  4. Utilizza il risultato per avviare un gruppo di app

Avvia un gruppo di app con un solo clic!

Dal punto di vista dell'utente, verrà visualizzato un elenco di diversi gruppi di applicazioni visualizzati sullo schermo (lavoro, riproduzione, ecc.). Sceglierai il gruppo che vuoi avviare, premi "OK" e verranno tutti lanciati per te. Molto carino


Passaggio 1. Impostare i gruppi

La prima cosa che dobbiamo fare è stabilire i nostri vari gruppi di app. Utilizzeremo tre diversi gruppi per questo tutorial: lavoro, gioco e produttività, ognuno dei quali contiene il proprio elenco di app.

Elenchi in AppleScript

In Applescript, una lista è molto simile a una variabile, solo che contiene più elementi distinti invece di uno solo. Una lista contenente le vocali dell'alfabeto inglese sarebbe simile a questa:

[AppleScript]
imposta vowelsList su "a", "e", "i", "o", "u", "y"
[/ AppleScript]

Da qui, possiamo afferrare e lavorare con le singole voci dell'elenco. Ad esempio, il seguente ritorna "e".

[AppleScript]
--Restituisce "e"
imposta vowelsList su "a", "e", "i", "o", "u", "y"
restituire l'elemento 2 di VowelsList
[/ AppleScript]

Si noti che molti linguaggi di programmazione sono "indicizzati a zero", quindi il primo elemento di un array o di un elenco è in realtà l'elemento zero. Questo non è il caso con AppleScript. Il primo elemento in una lista è l'articolo uno.


Si noti come le due lingue sono indicizzate in modo diverso

Le nostre quattro liste

Per il primo passo, imposteremo un totale di quattro elenchi diversi. I primi tre conterranno nomi di app esatti come appaiono in OS X e l'ultimo conterrà le tre categorie che abbiamo suddiviso i nostri gruppi di app in: Lavoro, Riproduzione e Produttività.

[AppleScript]
--Imposta gruppi
imposta workGroup su "Mail", "Safari", "TextEdit"
imposta playGroup su "Safari", "App Store", "iTunes"
imposta produttivitàGroup su "Notes", "Promemoria", "Mail"
imposta appGroups su "Lavoro", "Riproduci", "Produttività"
[/ AppleScript]

Qui, la prima riga di codice imposta una variabile che contiene un elenco di nomi di applicazioni: Mail, Safari e TextEdit. Ripeto questo processo altre due volte per gli altri gruppi.

L'ultima riga di codice ripete lo stesso processo, ma questa volta riempie la lista con tre nomi di gruppi essenzialmente arbitrari che ho inventato: lavoro, gioco e produttività.

La codifica consiste nel prendere grandi quantità di informazioni e inserirle in costrutti facilmente gestibili.

Il vantaggio di questo passaggio è che abbiamo stipato un tonnellata di informazioni in quattro variabili facilmente richiamabili. La codifica consiste nel prendere grandi quantità di informazioni e inserirle in costrutti facilmente gestibili. Lo vedremo su una scala ancora più grande nel prossimo passaggio.

Mancia: Ho usato tutte le app predefinite per i miei gruppi, ma se non sei su Mountain Lion, non avrai Note e promemoria. Cambia le app nell'elenco in quelle che hai effettivamente installato.


Passaggio 2. Creare un gestore di avvio app

Dopo aver impostato le mie variabili, mi piace passare a qualsiasi gestore che deve essere creato.

Nel passaggio precedente, abbiamo preso diversi elementi e li abbiamo inseriti in una lista per essere associati a una singola variabile. Con un gestore fai qualcosa di simile e prendi un'intera lista di comandi, azioni, ecc. E legali in una variabile.

Come con le funzioni in altre lingue, i gestori possono essere configurati per accettare un'informazione quando vengono chiamati. Questa informazione verrà quindi "inoltrata" e utilizzata in tutto il gestore.

Quali azioni meritano un gestore?

Come possiamo sapere quali azioni devono essere dichiarate da sole e quali devono essere incluse in un gestore? La regola empirica per vivere è che se ti ritrovi a ripetere una porzione considerevole di codice più di una volta, è probabilmente ora di impostare un gestore.

Se ti trovi a ripetere una porzione considerevole di codice più di una volta, è probabilmente ora di impostare un gestore.

Più avanti nel nostro script, avremo una necessità ripetuta di avviare tutte le app all'interno di un elenco fornito. Questo è il posto perfetto per implementare un gestore. La sintassi per configurare questo aspetto è la seguente:

[AppleScript]
su appLauncher (selectedGroup)
fine appLauncher
[/ AppleScript]

Come puoi vedere, è un po 'come un tell, solo che inizia con la parola "on" per indicare che si tratta di un gestore. Qui "appLauncher" è semplicemente il nome che ho scelto per il mio gestore. Come con le variabili, mantieni sempre queste semplici e descrittive.

La parte successiva di questa linea appare tra parentesi: (selectedGroup). Qui è dove passiamo una variabile che può quindi essere letta ed elaborata attraverso il gestore. Nel nostro caso, quando utilizzeremo questo gestore in un secondo momento, passeremo in uno dei nostri tre elenchi di gruppi di app.


L'anatomia di un operatore

Il gestore completo

Ora che abbiamo una shell che definisce i limiti del gestore, possiamo riempirlo con i comandi.

[AppleScript]
--App Launcher Handler
su appLauncher (selectedGroup)
ripeti con i da 1 a (numero di elementi nel gruppo selezionato)
tell application (item i of selectedGroup)
attivare
fine raccontare
fine ripetizione
fine appLauncher
[/ AppleScript]

Per prima cosa, ho impostato una ripetizione che passa attraverso ogni voce in qualsiasi elenco che passiamo, quindi uso ognuno di questi elementi come variabile per fungere da nome dell'app in un tellblock. Infine, un semplice comando "attiva" avvia le app nell'elenco.


Passaggio 3. Presentare l'elenco all'utente

Ora che abbiamo dichiarato le nostre variabili e configurato il nostro gestore, è ora di iniziare a interagire con l'utente. Quello che stiamo cercando di fare è creare una finestra di dialogo che contiene un elenco di opzioni.

Sembra che ci sarà molto lavoro, ma in realtà è super semplice. Abbiamo già impostato la nostra lista appGroups, ora abbiamo solo bisogno di una breve riga di codice per dire a AppleScript di presentare l'elenco.

[AppleScript]
--Lascia che l'utente selezioni un gruppo
impostare theSelection per scegliere da elenco appGruppi con titolo "Quale gruppo di app?"
[/ AppleScript]

Qui ho usato il comando "scegli dalla lista" per aprire una finestra di dialogo standard e usato "titolo" per assegnare del testo nella parte superiore della finestra di dialogo.


La finestra di dialogo Scegli da lista

Ottenere il risultato

Si noti che non abbiamo semplicemente detto a AppleScript di fornire all'utente un elenco. In realtà, impostiamo l'intero processo come una variabile con il comando "set".

Questo è un modo breve e dolce per creare una finestra di dialogo e ottenere il risultato tutto in un unico passaggio. Apparirà la finestra di dialogo, l'utente sceglierà un gruppo di app e il risultato sarà assegnato a "theSelection" come variabile.


Passaggio 4. Account for Cancels

Ora viene la parte difficile. L'utente ha visto e interagito con il dialogo e dobbiamo elaborare il risultato. Per fare questo, dobbiamo letteralmente considerare ogni possibile scenario e renderlo conto. Non assumere mai che gli utenti saranno logici o competenti. Invece, supponi che prenderanno ogni possibile percorso, specialmente quelli che potrebbero causare un errore.

Non assumere mai che gli utenti saranno logici o competenti.

Che aspetto ha un annullamento??

Il primo scenario che vorrei rendere conto è una cancellazione. La finestra si apre, l'utente cambia idea e preme cancel ... ora cosa?

In una fase precedente, abbiamo gettato il risultato della finestra in theSelection. Se l'utente annulla, il valore di questa variabile sarà impostato su "falso". Questa conoscenza rende lo scenario facile da gestire con un'istruzione if:

[AppleScript]
--Se l'utente annulla
se theSelection è false allora
errore numero -128
finisci se
[/ AppleScript]

Quindi cos'è questo errore numero -128 attività commerciale? AppleScript ha un intero elenco di possibili errori, a ciascuno dei quali viene assegnato un numero univoco. Si dà il caso che "utente annullato" sia -128.

Tutto quello che stiamo facendo qui è riportare ciò che è accaduto in modo che se si guardavano i risultati del nostro script in Script Editor, si vedrebbe che l'utente ha annullato l'operazione. Mentre questa azione si verifica, lo script termina e scompare dalla vista dell'utente, che è esattamente ciò che vogliamo in questo caso, quindi questo è il punto in cui andremo qui.


Passaggio 5. Determinare quale gruppo è stato selezionato

Ora arriva il grande traguardo. Se l'utente non cancella l'operazione, allora deve aver selezionato uno dei nostri tre gruppi. Il nostro compito è scoprire quale e agire di conseguenza.

Risolvere la nostra variabile

Prima di lanciarci in questi tre scenari, dobbiamo elaborare un po 'la nostra variabile. Quando l'utente seleziona un oggetto e fa clic su "ok", in realtà assegniamo un elenco a theSelection (ha solo un elemento, ma è comunque un elenco).

Per risolvere questo problema, basta sovrascrivere la variabile come segue.

[AppleScript]
--Se l'utente annulla
se theSelection è false allora
errore numero -128
altro
impostare theSelection sull'elemento 1 di theSelection
finisci se
[/ AppleScript]

Questo sembra un po 'strano, ma se non lo fai, lo script genererà un errore, quindi assicurati di non saltare questo passaggio!

Se l'utente sceglie il gruppo di lavoro

Ora che abbiamo fatto un po 'di lavoro domestico, possiamo procedere a confrontare il risultato dell'utente con le varie possibilità. La prima opzione è che l'utente ha scelto il gruppo di app "Lavoro".

In questo caso, la variabile "theSelection" dovrebbe essere uguale al primo elemento nella nostra lista "appGroups" (entrambi avranno un valore di "Lavoro"). Creiamo un'altra dichiarazione if per verificare la verità dell'uguaglianza.

[AppleScript]
--Se l'utente annulla
se theSelection è false allora
errore numero -128
altro
impostare theSelection sull'elemento 1 di theSelection

--Se la selezione è workGroup
se theSelection = (elemento 1 di appGroups) allora
AppLauncher (gruppo di lavoro)
finisci se
finisci se
[/ AppleScript]

Come puoi vedere, se l'affermazione è vera, eseguiremo il nostro gestore da prima con "workGroup" passato come elenco con cui vogliamo lavorare.

A questo punto, il nostro gestore conterà il numero di elementi in workGroup, quindi ripeterà un tell block con un comando "activate" per ognuno di questi elementi. Ciò farà sì che Mail, Safari e TextEdit si avviino correttamente e lo script terminerà.


Come la nostra dichiarazione if è strutturata per funzionare con il gestore.

Finendo

Utilizzando gli stessi passaggi, possiamo completare il nostro script aggiungendo due istruzioni "else if" che confrontano theSelection con gli altri due elementi in appGroups e lanciamo il gestore con l'elenco appropriato come input.

In ogni caso, il gestore passerà attraverso e avvierà le app dal gruppo selezionato.

[AppleScript]
--Se l'utente annulla
se theSelection è false allora
errore numero -128
altro
impostare theSelection sull'elemento 1 di theSelection

--Se la selezione è workGroup
se theSelection = (elemento 1 di appGroups) allora
AppLauncher (gruppo di lavoro)

--Se la selezione è playGroup
altrimenti se theSelection = (elemento 2 di appGroups) allora
AppLauncher (Playgroup)

--Se la selezione è produttivitàGruppo
altrimenti se theSelection = (elemento 3 di appGroups) allora
AppLauncher (productivityGroup)
altro
ritorno
finisci se
finisci se
[/ AppleScript]

Suggerimento per l'utente avanzato: Questo è un sacco di affermazioni da stipare insieme. Riesci a riscrivere questo codice usando un'istruzione ripetuta simile a ciò che abbiamo usato all'inizio?


Mettere tutto insieme

Si spera che lo abbiamo analizzato abbastanza lentamente da comprendere appieno ogni parte della sceneggiatura. Ecco uno sguardo alla sceneggiatura completa in un colpo solo:

[AppleScript]
--Imposta gruppi
imposta workGroup su "Mail", "Safari", "TextEdit"
imposta playGroup su "Safari", "App Store", "iTunes"
imposta produttivitàGroup su "Notes", "Promemoria", "Mail"
imposta appGroups su "Lavoro", "Riproduci", "Produttività"

--App Launcher Handler
su appLauncher (selectedGroup)
ripeti con i da 1 a (numero di elementi nel gruppo selezionato)
tell application (item i of selectedGroup)
attivare
fine raccontare
fine ripetizione
fine appLauncher

--Lascia che l'utente selezioni un gruppo
impostare theSelection per scegliere da elenco appGruppi con titolo "Quale gruppo di app?"

--Se l'utente annulla
se theSelection è false allora
errore numero -128
altro
impostare theSelection sull'elemento 1 di theSelection

--Se la selezione è workGroup
se theSelection = (elemento 1 di appGroups) allora
AppLauncher (gruppo di lavoro)

--Se la selezione è playGroup
altrimenti se theSelection = (elemento 2 di appGroups) allora
AppLauncher (Playgroup)

--Se la selezione è produttivitàGruppo
altrimenti se theSelection = (elemento 3 di appGroups) allora
AppLauncher (productivityGroup)
altro
ritorno
finisci se
finisci se
[/ AppleScript]

Ora che hai lo script completo, salvalo come un'applicazione, dagli un'icona di fantasia e gettalo nel dock.


Scrivi il tuo!

Se hai seguito con successo questo tutorial e hai compreso tutti i passaggi, congratulazioni! Sei decisamente un AppleScripter più che competente ed è tempo di espandersi da solo e creare degli script fantastici.

Lascia un commento qui sotto e parlami degli script che hai creato per il tuo Mac. Inoltre, se hai altre idee per gli script che dovrei coprire, fammelo sapere.