AppleScript Fun: modifica automatica della cartella dei download di Safari

Mentre i vari programmi e servizi di un computer sono pensati per offrirti la comodità, ci sono momenti in cui potresti aver bisogno di fare attività ripetitive usando i vari strumenti e programmi sul sistema. In questi casi, l'uso di strumenti di scripting può essere eccezionalmente utile. A differenza della programmazione, lo scripting è quando si prende un set di strumenti e utilità attuali e si automatizzano le loro interazioni con i comandi. Ad esempio, con Javascript puoi dire a un browser di cambiare il modo in cui rende il contenuto HTML, oppure con Automator puoi dire al Finder di organizzare i file in un certo modo.

Recentemente un collega qui a CNET mi ha contattato con una situazione unica, dove voleva che il suo Mac cambiasse automaticamente la cartella dei download di Safari in base alla presenza di un'unità esterna. L'idea sarebbe quella di fare in modo che Safari inserisca i file scaricati nella directory Download predefinita, ma quando si collega un'unità esterna specifica (ad esempio una chiavetta chiamata "Download"), per fare in modo che il sistema passi automaticamente alla directory dei download di Safari sull'unità esterna, dal momento che potrebbe essere difficile continuare a cambiarlo manualmente.

Sfortunatamente Safari non ha la capacità di farlo, ma OS X ha risorse che possono essere utilizzate per questo ed essere programmato usando AppleScript per la gestione dell'applicazione Safari e alcuni servizi di OS X, script di shell per eseguire alcune azioni che non usano l'interfaccia dell'applicazione e l'avvio del sistema solo per l'esecuzione degli script quando un'unità è collegata.

Inizialmente quando si pensa a questo problema la soluzione può sembrare abbastanza semplice, e il seguente scenario può sembrare una buona risposta:

  1. Configura uno script per eseguire il comando "defaults write com.apple.Safari DownloadFolder NAME" per cambiare la cartella dei download nella posizione specificata da "NAME"
  2. Esegui questo script utilizzando il programma di avvio del sistema solo quando è collegata un'unità specifica.
  3. Ripetere l'operazione con un comando simile che punta a una posizione diversa quando l'unità non è più collegata.

Sebbene questo approccio di base possa sembrare ragionevole, non funzionerà per una serie di motivi. Primo, una volta che Safari è in esecuzione, l'unico modo per cambiare le sue preferenze è attraverso il programma stesso. Quando il programma si carica leggerà le preferenze nella RAM e ne gestirà le impostazioni lì, quindi se modifichi il file delle preferenze usando TextEdit o il comando "defaults" come menzionato sopra, allora non avrà alcun effetto sul programma. Inoltre, Safari annota le sue preferenze su disco quando esce, che sovrascrive qualsiasi impostazione modificata.

Inoltre, questo approccio presuppone che il sistema disponga di risorse disponibili per monitorare la presenza di un'unità specifica e attivare lo script ogni volta che tale unità è presente, il che non è il caso. Il sistema può monitorare se le unità sono collegate o meno, ma sarebbero necessari script aggiuntivi per specificare il nome di un'unità da controllare ogni volta che un'unità viene collegata.

Infine, ci sono un certo numero di sfumature da considerare. Ad esempio, dal momento che Safari stesso deve essere utilizzato per modificare le sue preferenze durante l'esecuzione, fare in modo che diventi l'applicazione principale, dove rimarrà a meno che tu non abbia prima lo script a rilevare l'applicazione principale e ripristinarlo quando le modifiche a Safari sono completi Inoltre, non si desidera eseguire lo script e spostare il programma attivo quando viene collegata un'unità casuale.

Per questo motivo, lo script dovrebbe includere le seguenti cinque considerazioni:

  1. Avvia solo quando è collegata una nuova unità
  2. Modificare le impostazioni solo se è allegata un'unità denominata "Download" (o qualsiasi nome desiderato)
  3. Essere condizionato nel suo approccio per la modifica delle impostazioni sull'avvio o meno di Safari
  4. Modificare le impostazioni solo se è presente un nuovo percorso di download desiderato
  5. Avere la possibilità di ripristinare l'applicazione principale se lo script deve passare a Safari

Per implementare queste opzioni, è necessario creare due script. Il primo è per il launcher di sistema "launchd" che verrebbe utilizzato per monitorare i punti di mount drive del sistema, per vedere se una nuova unità è stata montata o montata. In tal caso, verrà avviato lo script che controllerà il nome dell'unità, verificherà se Safari è in esecuzione e quindi modificherà le impostazioni di Safari solo se differiscono principalmente dalla scelta dell'unità esterna, ma se non è presente, utilizzare la cartella Download predefinita .

Script 1: LaunchAgent per il monitoraggio delle unità

Il primo script da eseguire è per l'avvio del sistema, che è chiamato Launch Agent. Per crearlo, apri Terminale e digita il seguente comando (copia e incolla per semplicità):

tocca ~ / Libreria / LaunchAgents / local.ChangeSafariDownload.plist

Al termine, aprilo in TextEdit eseguendo il seguente comando:

apri -e ~ / Libreria / LaunchAgents / local.ChangeSafariDownload.plist

Ora dovresti avere un documento TextEdit vuoto, quindi copia il testo seguente e salva il documento, ma tienilo aperto per ora. Dovrai cambiare la sezione "FILEPATH" per cambiare la posizione dello script:

 Etichetta local.ChangeSafariDownloads QueueDirectories Programma WatchPaths / Volumes / usr / bin / osScript ProgramArguments osascript FILEPATH 

Quando si effettua l'accesso, questo script verrà caricato nel processo di avvio del sistema e gli verranno fornite le condizioni e le istruzioni per eseguire lo script principale per modificare le preferenze di Safari. In questo caso, al lanciatore verrà detto di guardare la directory / Volumi per vedere se si verificano cambiamenti all'interno di quella directory. Poiché questo è il punto in cui sono montati i filesystem, ogni volta che un'unità viene collegata o scollegata dal sistema, questo attiverà lo script principale da eseguire.

Script 2: AppleScript per la modifica delle impostazioni

Il secondo script è il principale che eseguirà tutte le azioni, compreso il controllo dei nomi delle unità, indipendentemente dal fatto che Safari sia aperto o meno e qualsiasi altra condizione per alterare le preferenze. Per crearlo, vai alla cartella / Applicazioni / Utility / e apri il programma AppleScript Editor. Si aprirà una finestra di editor vuota e quando lo copierà e incollerà il seguente script:

- Imposta qui il nome del drive alternativo da utilizzare come cartella dei download

imposta dlFolder per convertHome ("/ Volumes / Downloads")

all'applicazione "Finder"

se esiste [ POSIX file dlFolder] allora

- Non fare nulla e usa la cartella

altro

- imposta dlFolder sulla directory home predefinita

imposta dlFolder su (percorso POSIX di ( percorso alla cartella home come testo )) e "Download"

finisci se

fine raccontare

- ottenere il percorso corrente da safari plist

imposta currentpath a convertHome ( fai lo script di shell "defaults read com.apple.Safari DownloadsPath")

- cambia percorso solo se l'impostazione corrente non corrisponde al percorso di input (c'è qualcosa da cambiare)

se (currentpath come testo ) non è uguale a (dlFolder come testo ) allora

- se Safari è in esecuzione, modifica le impostazioni tramite le preferenze di Safari

se appIsRunning ("Safari") allora

- Determina l'applicazione in primo piano da ripristinare al termine dello script

imposta frontApp al percorso per l' applicazione in primo piano come testo

- copia il percorso della cartella di download negli appunti

imposta gli appunti su dlFolder come testo

attivare l' applicazione "Safari"

dire all'applicazione "Eventi di sistema" per dire al processo di applicazione "Safari"

- apri le preferenze o porta in primo piano (finestra 1)

battitura ", " usando {command down}

ritardo 1 - le pause nella visualizzazione della finestra possono causare un errore, quindi aspettiamo un secondo

- Passa alla scheda Generale

fare clic sul pulsante "Generale" della barra degli strumenti 1 della finestra 1

- Cambia posizione di download in Altro

dire pulsante pop-up "Salva file scaricati su:" del gruppo 1 del gruppo 1 della finestra "Generale"

clic

Fare clic sulla voce di menu "Altro ..." del menu 1 - tre punti è un'ellissi, non tre punti

fine raccontare

- Apri la finestra di dialogo "vai alla cartella"

battitura "g" usando {shift down, command down}

- Incolla il percorso della cartella nel campo posizione

tell window "Vai alla cartella"

battitura "v" usando {command down}

ritorno del tasto

fine raccontare

fare clic sul pulsante "Seleziona" del foglio 1 della finestra "Generale"

- chiudi le preferenze

battitura "w" usando {command down}

fine raccontare

- ripristinare l'applicazione in primo piano dopo il completamento del lavoro

per attivare l' applicazione frontApp

altro

- se Safari NON è in esecuzione, quindi utilizzare il comando defaults per modificare le preferenze

script di shell ("defaults write com.apple.Safari DownloadsPath" & dlFolder)

finisci se

finisci se

- Funzione per convertire i riferimenti del percorso home ai percorsi completi

su convertHome (percorso corrente)

se currentpath contiene "~ /" allora

imposta oldDelimiter ai delimitatori di elementi di testo di AppleScript

imposta i delimitatori di elementi di testo di AppleScript su {"~ /"}

imposta textPath su ogni elemento di testo di currentpath

imposta i delimitatori di elementi di testo di AppleScript su oldDelimiter

imposta percorso corrente al percorso POSIX di ( percorso alla cartella home come testo ) e voce 2 in textPath

finisci se

restituisce currentpath

fine convertHome

- Funzione per verificare se l'applicazione "appName" è in esecuzione (in questo caso, utilizzato per Safari)

su appIsRunning (appName)

dire all'applicazione "Eventi di sistema" a (nome dei processi ) contiene appName

fine appIsRunning

Il testo dello script sarà inizialmente viola, ma quando si fa clic sul pulsante Compila barra degli strumenti o se si salva lo script, esso diventerà colorized simile a ciò che si vede qui. Salva lo script con un nome come "ChangeDownloads" in una posizione a tua scelta (puoi metterlo in una cartella "Scripts" nella directory Documenti o all'interno della libreria utente) e chiudere l'editor AppleScript.

Ora apri una nuova finestra di Terminale e trascina su di essa il file di script appena creato. Quando lo fai, il percorso completo del file allo script verrà inserito nella finestra, che assomiglierà a "/Users/username/Documents/ChangeDownloads.scpt". Utilizzando il mouse, selezionare l'intero percorso del file, premere Comando-C per copiarlo negli Appunti e tornare allo Script 1 in TextEdit e sostituire la voce "FILEPATH" con il testo copiato. Quindi salvare e chiudere il documento.

A questo punto gli script sono tutti impostati. Basta disconnettersi e riconnettersi per caricare lo script dell'agente di lancio (Script 1) e ora quando si monta un'unità denominata "Download", le impostazioni di Safari verranno automaticamente modificate in modo che utilizzino tale unità come cartella dei download. Se si smonta quindi l'unità, l'impostazione verrà ripristinata. Lo stesso accadrà anche se si rinomina un'unità per essere denominata "Download" o cambiare il suo nome da "Download" a qualcos'altro.

Tieni presente che mentre questo script funziona, è stato testato solo su OS X 10.6 "Snow Leopard" e OS X 10.7 "Lion" con Safari 5.1; tuttavia, dovrebbe funzionare bene su altre configurazioni di sistema che eseguono almeno Safari 5.0. I requisiti principali sono quando lo script sta manipolando le preferenze di Safari all'interno del programma, utilizza gli indici dei pulsanti per aprire vari menu e fare clic sui vari pulsanti sullo schermo. Se Apple cambierà l'organizzazione delle preferenze in Safari in futuro, questa parte dello script non funzionerà finché non verrà modificata per puntare nuovamente ai pulsanti corretti. Tuttavia, per ora questa è una limitazione che dovremo affrontare. Una soluzione alternativa per questo in Lion è sfruttare la funzionalità di ripresa di Apple in uno script per uscire da Safari, apportare le modifiche alle preferenze e quindi riavviare il programma anziché dover programmare l'interfaccia.

Infine, se si decide di non volere più questo script, è possibile disinstallarlo eliminando il file AppleScript e quindi rimuovendo il file LaunchAgent manualmente o eseguendo il seguente comando nel Terminale. Quando questo è fatto basta uscire e ricollegarsi, e si ritorna al punto di partenza:

rm ~ / Library / LaunchAgents / local.ChangeSafariDownload.plist


 

Lascia Il Tuo Commento