AppleScript Fun: Αυτόματη αλλαγή του φακέλου λήψεων του Safari

Ενώ τα διάφορα προγράμματα και υπηρεσίες σε έναν υπολογιστή προορίζονται να σας προσφέρουν άνεση, υπάρχουν φορές που ίσως χρειαστεί να κάνετε επαναλαμβανόμενες εργασίες χρησιμοποιώντας τα διάφορα εργαλεία και προγράμματα του συστήματος. Σε αυτές τις περιπτώσεις, η χρήση εργαλείων δέσμης ενεργειών μπορεί να είναι εξαιρετικά χρήσιμη. Σε αντίθεση με τον προγραμματισμό, η δέσμη ενεργειών είναι όταν παίρνετε ένα σύνολο από τρέχοντα εργαλεία και βοηθητικά προγράμματα και αυτοματοποιείτε τις αλληλεπιδράσεις τους με εντολές. Για παράδειγμα, με το Javascript μπορείτε να πείτε σε ένα πρόγραμμα περιήγησης για να αλλάξετε τον τρόπο με τον οποίο εμφανίζει το περιεχόμενο HTML ή με το Automator μπορείτε να πείτε στο Finder να οργανώνει τα αρχεία με κάποιο τρόπο.

Πρόσφατα ένας συνάδελφος εδώ στο CNET με πλησίασε με μια μοναδική κατάσταση, όπου ήθελε να έχει το Mac να αλλάξει αυτόματα το φάκελο του Safari για downloads με βάση την παρουσία μιας εξωτερικής μονάδας δίσκου. Η ιδέα εδώ θα ήταν να έχει το Safari να κατεβάσει τα αρχεία στον κατάλογο των προεπιλεγμένων αρχείων λήψης, αλλά όταν επισυνάπτετε μια συγκεκριμένη εξωτερική μονάδα δίσκου (όπως ένα thumbdrive που ονομάζεται "Downloads"), τότε το σύστημα θα μεταφέρει αυτόματα τον κατάλογο downloads του Safari στον εξωτερικό δίσκο, καθώς μπορεί να είναι δυσκίνητη η συνέχιση της αλλαγής με το χέρι.

Δυστυχώς το Safari δεν έχει τη δυνατότητα να το κάνει αυτό, αλλά το OS X διαθέτει πόρους που μπορούν να χρησιμοποιηθούν για αυτό και να γραφτούν χρησιμοποιώντας το AppleScript για τη διαχείριση της εφαρμογής Safari και ορισμένων υπηρεσιών OS X, Shell scripting για να εκτελέσει κάποιες ενέργειες που δεν χρησιμοποιούν το περιβάλλον εργασίας εφαρμογών και το σύστημα εκκίνησης για την εκτέλεση μόνο των σεναρίων όταν συνδέεται μια μονάδα δίσκου.

Αρχικά, όταν σκεφτόμαστε αυτό το πρόβλημα, η λύση μπορεί να φαίνεται αρκετά απλή και το ακόλουθο σενάριο μπορεί να φαίνεται σαν μια καλή απάντηση:

  1. Ρυθμίστε μια δέσμη ενεργειών για να εκτελέσετε την εντολή "defaults write com.apple.Safari DownloadFolder NAME" για να αλλάξετε το φάκελο λήψεων στη θέση που καθορίζεται από το "NAME"
  2. Εκτελέστε αυτήν τη δέσμη ενεργειών χρησιμοποιώντας το πρόγραμμα εκκίνησης συστήματος μόνο όταν είναι συνδεδεμένη μια συγκεκριμένη μονάδα δίσκου.
  3. Επαναλάβετε αυτό με μια παρόμοια εντολή που δείχνει σε διαφορετική θέση όταν η μονάδα δεν είναι πλέον συνδεδεμένη.

Αν και αυτή η βασική προσέγγιση μπορεί να φανεί λογική, δεν θα λειτουργήσει για διάφορους λόγους. Πρώτον, μόλις τρέξει το Safari, ο μόνος τρόπος για να αλλάξετε τις προτιμήσεις του είναι μέσω του ίδιου του προγράμματος. Όταν φορτώνει το πρόγραμμα, θα διαβάσει τις προτιμήσεις στη μνήμη RAM και θα διαχειριστεί τις ρυθμίσεις του εκεί, οπότε αν επεξεργαστείτε το αρχείο προτιμήσεων χρησιμοποιώντας το TextEdit ή την εντολή "προεπιλογές" όπως αναφέρθηκε παραπάνω, τότε δεν θα έχει καμία επίδραση στο πρόγραμμα. Επιπλέον, το Safari γράφει τις προτιμήσεις του πίσω στο δίσκο όταν τερματίσει, κάτι που θα αντικαταστήσει τυχόν τροποποιημένες ρυθμίσεις.

Επιπλέον, αυτή η προσέγγιση υποθέτει ότι το σύστημα διαθέτει διαθέσιμους πόρους που θα παρακολουθούν την παρουσία μιας συγκεκριμένης μονάδας δίσκου και θα ενεργοποιούν τη δέσμη ενεργειών κάθε φορά που υπάρχει αυτή η μονάδα, κάτι που δεν συμβαίνει. Το σύστημα μπορεί να ελέγξει εάν οι μονάδες δίσκου είναι συνδεδεμένες ή όχι, αλλά θα χρειαστεί πρόσθετη δέσμη ενεργειών για να καθορίσετε ένα όνομα μονάδας δίσκου για να ελέγξετε όποτε συνδέεται μια μονάδα δίσκου.

Τέλος, υπάρχουν αρκετές αποχρώσεις που πρέπει να εξετάσετε. Για παράδειγμα, επειδή το ίδιο το Safari πρέπει να χρησιμοποιηθεί για να αλλάξει τις προτιμήσεις του κατά την εκτέλεση, αυτό θα τον αναγκάσει να είναι η πρώτη εφαρμογή, όπου θα παραμείνει αν δεν έχετε πρώτα το σενάριο να ανιχνεύσει την πρώτη εφαρμογή και να το επαναφέρετε όταν οι αλλαγές στο Safari είναι πλήρεις. Επιπλέον, δεν θέλετε να εκτελείται η δέσμη ενεργειών και να περιστρέφεται το ενεργό πρόγραμμα γύρω όταν επισυνάπτεται τυχαία μονάδα δίσκου.

Εξαιτίας αυτών, το σενάριο θα πρέπει να περιλαμβάνει τις ακόλουθες πέντε σκέψεις:

  1. Εκκινήστε μόνο όταν συνδέεται μια νέα μονάδα δίσκου
  2. Αλλάξτε τις ρυθμίσεις μόνο εάν έχετε συνδέσει μια μονάδα με τίτλο "Λήψεις" (ή οποιοδήποτε ονοματεπώνυμο)
  3. Να εξαρτάται από την προσέγγισή του για την αλλαγή των ρυθμίσεων σχετικά με το εάν ή όχι το Safari εκτελείται αυτή τη στιγμή
  4. Αλλάξτε τις ρυθμίσεις μόνο εάν υπάρχει μια νέα επιθυμητή τοποθεσία λήψης
  5. Έχετε τη δυνατότητα να επαναφέρετε την πιο σημαντική εφαρμογή, εάν το σενάριο πρέπει να μεταβεί στο Safari

Για να εφαρμοστούν αυτές οι επιλογές, θα πρέπει να δημιουργηθούν δύο δέσμες ενεργειών. Το πρώτο είναι για το σύστημα εκτόξευσης του συστήματος "launchd", το οποίο θα χρησιμοποιηθεί για την παρακολούθηση των σημείων εγκατάστασης του δίσκου του συστήματος, για να δει εάν έχει τοποθετηθεί και τοποθετηθεί νέα μονάδα δίσκου. Αν ναι, θα ξεκινήσει το σενάριο που θα ελέγξει το όνομα της μονάδας, θα δει εάν το Safari τρέχει ή όχι και, στη συνέχεια, αλλάζει τις ρυθμίσεις του Safari μόνο αν διαφέρει από την επιλογή της εξωτερικής μονάδας, αλλά εάν δεν είναι παρούσα τότε χρησιμοποιήστε το προεπιλεγμένο φάκελο Downloads .

Script 1: LaunchAgent για παρακολούθηση μονάδων δίσκου

Το πρώτο σενάριο που πρέπει να κάνετε είναι για το σύστημα εκκίνησης, το οποίο καλείται Agent Launch. Για να το δημιουργήσετε, ανοίξτε το Terminal και πληκτρολογήστε την ακόλουθη εντολή (αντιγράψτε και επικολλήστε την για απλότητα):

αγγίξτε ~ / Library / LaunchAgents / local.ChangeSafariDownload.plist

Όταν γίνει αυτό, ανοίξτε το στο TextEdit εκτελώντας την ακόλουθη εντολή:

open -e ~ / Βιβλιοθήκη / LaunchAgents / local.ChangeSafariDownload.plist

Θα πρέπει τώρα να ανοίξετε ένα κενό έγγραφο TextEdit, ώστε να αντιγράψετε το παρακάτω κείμενο σε αυτό και να αποθηκεύσετε το έγγραφο, αλλά να το κρατάτε ανοικτό για τώρα. Θα χρειαστεί να αλλάξετε την ενότητα "FILEPATH" για να αλλάξετε την τοποθεσία του σεναρίου:

 Ετικέτα local.ChangeSafariΠαρακολουθήστε QueueDirectories ΠαρακολουθήστεPaths / τόμους Πρόγραμμα / usr / bin / osascript ΠρόγραμμαΑρχεία oascriptFILEPATH 

Όταν συνδεθείτε, αυτή η δέσμη ενεργειών θα φορτωθεί στη διαδικασία εκκίνησης του συστήματος και θα της δώσει τις προϋποθέσεις και τις οδηγίες για την εκτέλεση του κύριου σεναρίου για την επεξεργασία των προτιμήσεων του Safari. Σε αυτήν την περίπτωση, ο εκτοξευτής θα ειδοποιηθεί για να παρακολουθήσει τον κατάλογο / τόμους για να διαπιστώσει εάν εμφανίζονται οποιεσδήποτε αλλαγές στο συγκεκριμένο κατάλογο. Δεδομένου ότι αυτό είναι όπου τα συστήματα αρχείων είναι τοποθετημένα, οποτεδήποτε μια μονάδα δίσκου είναι προσαρτημένη ή αποσυνδεθεί από το σύστημα αυτό θα ενεργοποιήσει το κύριο σενάριο για να τρέξει.

Σενάριο 2: AppleScript για αλλαγή των ρυθμίσεων

Το δεύτερο σενάριο είναι το κύριο σενάριο που θα εκτελέσει όλες τις ενέργειες, συμπεριλαμβανομένου του ελέγχου των ονομάτων των οχημάτων, ανεξάρτητα από το εάν το Safari είναι ανοικτό ή όχι, καθώς και οποιεσδήποτε άλλες προϋποθέσεις για την τροποποίηση των προτιμήσεων. Για να το δημιουργήσετε, μεταβείτε στο φάκελο / Applications / Utilities / και ανοίξτε το πρόγραμμα AppleScript Editor. Ένα κενό παράθυρο προγράμματος επεξεργασίας θα ανοίξει και όταν αντιγράψει και επικολλήσει το ακόλουθο σενάριο σε αυτό:

- Ορίστε εναλλακτικό όνομα μονάδας δίσκου για χρήση ως φάκελο λήψεων εδώ

ορίστε το dlFolder για να μετατρέψετε τοHome ("/ Τόμοι / Λήψεις")

πείτε την εφαρμογή "Finder"

αν υπάρχει [ αρχείο POSIX dlFolder] στη συνέχεια

- Μην κάνετε τίποτα και χρησιμοποιήστε το φάκελο

αλλού

- ορίστε το dlFolder στον προεπιλεγμένο αρχικό κατάλογο

ορίστε το dlFolder σε (διαδρομή POSIX της ( διαδρομή προς τον αρχικό φάκελο ως κείμενο )) & "Λήψεις"

τέλος εαν

το τέλος λένε

- να πάρετε την τρέχουσα διαδρομή από το πιάτο σαφάρι

ορίστε το currentpath στο convertHome ( κάντε script script "προεπιλογές read com.apple.Safari DownloadsPath")

- αλλαγή διαδρομής μόνο αν η τρέχουσα ρύθμιση δεν ταιριάζει με τη διαδρομή εισόδου (υπάρχει κάτι που πρέπει να αλλάξει)

αν (currentpath ως κείμενο ) δεν είναι ίση με (dlFolder ως κείμενο ) τότε

- εάν εκτελείται το Safari, αλλάξτε τις ρυθμίσεις μέσω των προτιμήσεων του Safari

αν το AppIsRunning ("Safari") τότε

- προσδιορισμός της πρώτης εφαρμογής για επαναφορά όταν ολοκληρωθεί η δέσμη ενεργειών

ορίστε το frontApp στη διαδρομή προς την πρώτη εφαρμογή ως κείμενο

- αντιγράψτε τη διαδρομή του φακέλου λήψης στο πρόχειρο

ορίστε το πρόχειρο στο dlFolder ως κείμενο

ενεργοποιήστε την εφαρμογή "Safari"

πείτε την εφαρμογή "Συμβάντα Συστήματος" για να αναφέρετε τη διαδικασία υποβολής αιτήσεων "Safari"

- ανοίξτε τις προτιμήσεις ή φέρετε προς τα εμπρός (παράθυρο 1)

πληκτρολόγηση ", " χρησιμοποιώντας την εντολή {down down}

καθυστέρηση 1 - οι παύσεις στην εμφάνιση των παραθύρων μπορεί να προκαλέσουν σφάλμα, οπότε περιμένουμε ένα δευτερόλεπτο

- Αλλαγή στην καρτέλα Γενικά

κάντε κλικ στο κουμπί "Γενικά" της γραμμής εργαλείων 1 του παραθύρου 1

- Αλλαγή τοποθεσίας λήψης σε Άλλο

λέξτε το αναδυόμενο κουμπί "Αποθήκευση αρχείων που έχουν ληφθεί σε:" της ομάδας 1 της ομάδας 1 του παραθύρου "Γενικά"

Κάντε κλικ

κάντε κλικ στο στοιχείο μενού "Άλλο ..." του μενού 1 - τρεις κουκίδες είναι μια ελλείψη, όχι τρεις περίοδοι

το τέλος λένε

- Ανοίξτε το παράθυρο διαλόγου "Μετάβαση στο φάκελο"

πληκτρολογήστε "g" χρησιμοποιώντας {στροφή προς τα κάτω, εντολή προς τα κάτω}

- Επικολλήστε τη διαδρομή του φακέλου στο πεδίο θέσης

να πει το παράθυρο "Go To Folder"

πληκτρολογήστε "v" χρησιμοποιώντας {command down}

επιστροφή πληκτρολογίου

το τέλος λένε

κάντε κλικ στο κουμπί "Επιλογή" του φύλλου 1 του παραθύρου "Γενικά"

- κλείστε τις προτιμήσεις

πληκτρολογήστε "w" χρησιμοποιώντας {command down}

το τέλος λένε

- να επαναφέρετε την πρώτη εφαρμογή μετά την ολοκλήρωση της εργασίας

πείτε στην εφαρμογή frontApp να ενεργοποιηθεί

αλλού

- Εάν το Safari ΔΕΝ τρέχει, τότε χρησιμοποιήστε την εντολή προεπιλογών για να αλλάξετε τις προτιμήσεις

κάνουμε σενάριο κελύφους ("default write com.apple.Safari DownloadsPath" & dlFolder)

τέλος εαν

τέλος εαν

- Λειτουργία για τη μετατροπή των αναφορών της αρχικής διαδρομής σε πλήρεις διαδρομές

στο convertHome (τρέχουσα διαδρομή)

αν το currentpath περιέχει "~ /" στη συνέχεια

ορίστε oldDelimiter στους αποδιαμορφωτές στοιχείων κειμένου της AppleScript

ορίστε τους αποδιαμορφωτές στοιχείων κειμένου του AppleScript σε {"~ /"}

ορίστε textPath σε κάθε στοιχείο κειμένου του currentpath

ορίστε τους αποδιαμορφωτές στοιχείων κειμένου του AppleScript στο oldDelimiter

ορίστε την τρέχουσα διαδρομή προς τη διαδρομή POSIX της ( διαδρομή προς τον αρχικό φάκελο ως κείμενο ) και το στοιχείο 2 στο textPath

τέλος εαν

Επιστροφή στην τρέχουσα διαδρομή

end convertHome

- Λειτουργία για να ελέγξετε αν εκτελείται η εφαρμογή "appName" (στην περίπτωση αυτή χρησιμοποιείται για το Safari)

σχετικά με την εφαρμογή appIsRunning (appName)

πείτε στην εφαρμογή "Συμβάντα συστήματος" στο (όνομα των διαδικασιών ) περιέχει appName

end appIsRunning

Το κείμενο του σεναρίου θα είναι αρχικά μοβ, αλλά όταν κάνετε κλικ στο κουμπί Compile toolbar ή αν αποθηκεύσετε το σενάριο τότε θα γίνει χρωματισμένο παρόμοιο με αυτό που βλέπετε εδώ. Αποθηκεύστε τη δέσμη ενεργειών με ένα όνομα όπως το "ChangeDownloads" σε μια τοποθεσία της επιλογής σας (μπορείτε να την τοποθετήσετε σε ένα φάκελο "Scripts" στον κατάλογο Documents ή μέσα στη βιβλιοθήκη χρηστών σας) και να κλείσετε τον επεξεργαστή AppleScript.

Τώρα ανοίξτε ένα νέο παράθυρο του τερματικού και σύρετε το νέο αρχείο δέσμης ενεργειών σε αυτό. Όταν το κάνετε αυτό, η πλήρης διαδρομή αρχείου στο σενάριο θα εισαχθεί στο παράθυρο, το οποίο θα φαίνεται σαν "/Users/username/Documents/ChangeDownloads.scpt". Χρησιμοποιώντας το ποντίκι, επιλέξτε το σύνολο της διαδρομής του αρχείου, πατήστε Command-C για να το αντιγράψετε στο πρόχειρο και επιστρέψτε στο Script 1 στο TextEdit και αντικαταστήστε την καταχώρηση "FILEPATH" με το αντιγραμμένο κείμενο. Στη συνέχεια, αποθηκεύστε και κλείστε το έγγραφο.

Σε αυτό το σημείο τα σενάρια είναι όλα ρυθμισμένα. Απλώς αποσυνδεθείτε και συνδεθείτε ξανά για να φορτώσετε τη δέσμη ενεργειών εκκίνησης (Script 1) και τώρα όταν συνδέετε μια μονάδα που ονομάζεται "Λήψεις", οι ρυθμίσεις του Safari θα αλλάξουν αυτόματα, ώστε να χρησιμοποιεί τη μονάδα ως φάκελο λήψεων. Αν στη συνέχεια αποσυνδέσετε τη μονάδα, η ρύθμιση θα επανέλθει. Το ίδιο θα συμβεί και αν μετονομάσετε μια μονάδα που θα ονομάζεται "Λήψεις" ή θα αλλάξετε το όνομα της από "Λήψεις" σε κάτι άλλο.

Λάβετε υπόψη ότι ενώ λειτουργεί αυτό το σενάριο, έχει δοκιμαστεί μόνο σε λειτουργικό σύστημα OS X 10.6 "Snow Leopard" και OS X 10.7 "Lion" με Safari 5.1. Ωστόσο, θα πρέπει να λειτουργήσει καλά σε άλλες διαμορφώσεις συστημάτων που εκτελούν τουλάχιστον το Safari 5.0. Οι κύριες απαιτήσεις είναι όταν το σενάριο χειρίζεται τις προτιμήσεις του Safari μέσα στο πρόγραμμα, χρησιμοποιεί ευρετήρια κουμπιών για να ανοίξει διάφορα μενού και να κάνει κλικ στα διάφορα κουμπιά στην οθόνη. Εάν η Apple αλλάξει τον οργανισμό προτιμήσεων στο Safari στο μέλλον, τότε αυτό το μέρος της δέσμης ενεργειών δεν θα λειτουργήσει μέχρι να επεξεργαστεί για να δείξει πάλι τα κατάλληλα κουμπιά. Ωστόσο, για τώρα αυτό είναι ένας περιορισμός που θα πρέπει να αντιμετωπίσουμε. Μια λύση για αυτό στο Lion είναι να εκμεταλλευτείτε τη δυνατότητα Resume της Apple σε μια δέσμη ενεργειών για να εγκαταλείψετε το Safari, να κάνετε τις αλλαγές στις προτιμήσεις και στη συνέχεια να επανεκκινήσετε το πρόγραμμα αντί να χρειαστεί να προγραμματίσετε τη διεπαφή.

Τέλος, αν αποφασίσετε ότι δεν θέλετε πια αυτή τη δέσμη ενεργειών, μπορείτε να την απεγκαταστήσετε διαγράφοντας το αρχείο AppleScript και στη συνέχεια αφαιρώντας το αρχείο LaunchAgent είτε με το χέρι είτε εκτελώντας την ακόλουθη εντολή στο Terminal. Όταν αυτό γίνει, απλώς αποσυνδεθείτε και συνδεθείτε ξανά και θα επιστρέψετε στο τετράγωνο:

rm ~ / Βιβλιοθήκη / LaunchAgents / local.ChangeSafariDownload.plist


 

Αφήστε Το Σχόλιό Σας