AppleScript-Spaß: Safari-Ordner automatisch ändern

Während die verschiedenen Programme und Dienste auf einem Computer Ihnen Bequemlichkeit bieten sollen, müssen Sie unter Umständen die sich wiederholenden Aufgaben mit den verschiedenen Tools und Programmen des Systems ausführen. In diesen Fällen kann die Verwendung von Skriptwerkzeugen außerordentlich nützlich sein. Im Gegensatz zum Programmieren wird beim Scripting eine Reihe aktueller Tools und Dienstprogramme verwendet, um deren Interaktion mit Befehlen zu automatisieren. Mit Javascript können Sie beispielsweise einem Browser mitteilen, dass er die Darstellung von HTML-Inhalten ändern soll, oder mit Automator den Finder anweisen, Dateien auf eine bestimmte Weise zu organisieren.

Vor kurzem kam ein Kollege hier bei CNET mit einer einzigartigen Situation auf mich zu. Er wollte, dass sein Mac den Download-Ordner von Safari automatisch aufgrund des Vorhandenseins eines externen Laufwerks wechselt. Die Idee hier wäre, dass Safari heruntergeladene Dateien im Standardverzeichnis für Downloads ablegt. Wenn Sie jedoch ein bestimmtes externes Laufwerk (z. B. ein USB-Stick namens "Downloads") anschließen, wechselt das System automatisch das Download-Verzeichnis von Safari auf das externe Laufwerk, da es mühsam sein kann, es manuell zu ändern.

Leider hat Safari selbst nicht die Möglichkeit, dies zu tun, aber OS X verfügt über Ressourcen, die dazu verwendet werden können, und die mit AppleScript für die Verwaltung der Safari-Anwendung und einiger OS X-Dienste Skript erstellt werden. Shell-Skripting zum Ausführen einiger Aktionen, die nicht verwendet werden die Anwendungsschnittstelle und das Systemstartprogramm, um die Skripts nur auszuführen, wenn ein Laufwerk angeschlossen ist.

Wenn Sie über dieses Problem nachdenken, scheint die Lösung zunächst recht unkompliziert und das folgende Szenario mag eine gute Antwort sein:

  1. Richten Sie ein Skript ein, um den Befehl "defaults write com.apple.Safari DownloadFolder NAME" auszuführen, um den Downloadordner in den durch "NAME" angegebenen Speicherort zu ändern.
  2. Führen Sie dieses Skript mit dem Systemstartprogramm nur aus, wenn ein bestimmtes Laufwerk angeschlossen ist.
  3. Wiederholen Sie dies mit einem ähnlichen Befehl, der auf eine andere Position zeigt, wenn das Laufwerk nicht mehr angeschlossen ist.

Dieser grundlegende Ansatz mag zwar vernünftig erscheinen, funktioniert jedoch aus mehreren Gründen nicht. Sobald Safari einmal ausgeführt wird, können Sie die Präferenzen nur über das Programm selbst ändern. Wenn das Programm geladen wird, werden die Voreinstellungen in den Arbeitsspeicher eingelesen und dort verwaltet. Wenn Sie die Voreinstellungsdatei mit TextEdit oder dem Befehl "defaults" wie oben beschrieben bearbeiten, hat dies jedoch keine Auswirkungen auf das Programm. Außerdem schreibt Safari seine Einstellungen beim Beenden wieder auf die Festplatte, wodurch die geänderten Einstellungen überschrieben werden.

Bei diesem Ansatz wird außerdem davon ausgegangen, dass das System über verfügbare Ressourcen verfügt, die das Vorhandensein eines bestimmten Laufwerks überwachen und das Skript auslösen, wann immer dieses Laufwerk vorhanden ist. Dies ist jedoch nicht der Fall. Das System kann überwachen, ob Laufwerke angeschlossen sind oder nicht, es sind jedoch zusätzliche Skripts erforderlich, um einen Laufwerksnamen anzugeben, der überprüft werden soll, wenn ein Laufwerk angeschlossen ist.

Schließlich sind noch einige Nuancen zu beachten. Da zum Beispiel Safari zum Ausführen der Voreinstellungen selbst verwendet werden muss, erzwingt dies, dass es die erste Anwendung ist, in der es bleiben wird, es sei denn, das Skript muss die erste Anwendung zuerst erkennen und bei den Änderungen an Safari wiederherstellen sind vollständig. Darüber hinaus möchten Sie nicht, dass das Skript ausgeführt wird und das aktive Programm umschaltet, wenn ein beliebiges Laufwerk angeschlossen ist.

Aus diesem Grund muss das Skript die folgenden fünf Überlegungen enthalten:

  1. Nur starten, wenn ein neues Laufwerk angeschlossen ist
  2. Ändern Sie die Einstellungen nur, wenn ein Laufwerk mit dem Namen "Downloads" (oder ein beliebiger Name) angeschlossen ist
  3. Seien Sie in seinem Ansatz davon abhängig, Einstellungen zu ändern, ob Safari derzeit gestartet ist oder nicht
  4. Ändern Sie die Einstellungen nur, wenn ein neuer gewünschter Downloadort vorhanden ist
  5. Sie können die vorderste Anwendung wiederherstellen, wenn das Skript zu Safari wechseln muss

Um diese Optionen zu implementieren, müssen zwei Skripts erstellt werden. Der erste ist für den Systemstarter "launchd", der zur Überwachung der Laufwerksmountpunkte des Systems verwendet wird, um festzustellen, ob ein neues Laufwerk angeschlossen und installiert wurde. Wenn dies der Fall ist, wird das Skript gestartet, das den Laufwerknamen überprüft, prüft, ob Safari ausgeführt wird oder nicht. Ändern Sie dann die Einstellungen von Safari nur, wenn sie sich von der Wahl des externen Laufwerks unterscheiden. Wenn dies nicht der Fall ist, verwenden Sie den Standardordner "Downloads" .

Skript 1: LaunchAgent zur Überwachung von Laufwerken

Das erste Skript, das erstellt wird, ist für das System-Startprogramm, das als Start-Agent bezeichnet wird. Um es zu erstellen, öffnen Sie das Terminal und geben Sie den folgenden Befehl ein (kopieren Sie ihn und fügen Sie ihn der Einfachheit halber ein):

Berühren Sie ~ / Library / LaunchAgents / local.ChangeSafariDownload.plist

Wenn dies geschehen ist, öffnen Sie es in TextEdit, indem Sie den folgenden Befehl ausführen:

öffnen -e ~ / Library / LaunchAgents / local.ChangeSafariDownload.plist

Sie sollten jetzt ein leeres TextEdit-Dokument geöffnet haben. Kopieren Sie den folgenden Text in das Dokument und speichern Sie das Dokument. Lassen Sie es jedoch für jetzt geöffnet. Sie müssen den Abschnitt "FILEPATH" ändern, um den Speicherort des Skripts zu ändern:

 Label local.ChangeSafariDownloads QueueDirectories WatchPaths / Volumes-Programm / usr / bin / osascript ProgramArguments osascript FILEPATH 

Wenn Sie sich anmelden, wird dieses Skript in den System-Starter-Prozess geladen und gibt ihm Bedingungen und Anweisungen zum Ausführen des Hauptskripts für die Bearbeitung der Safari-Voreinstellungen. In diesem Fall wird der Launcher aufgefordert, das Verzeichnis / Volumes zu überwachen, um festzustellen, ob Änderungen in diesem Verzeichnis auftreten. Da hier Dateisysteme eingehängt werden, wird jedes Mal, wenn ein Laufwerk angeschlossen oder vom System getrennt wird, das Hauptskript ausgeführt.

Skript 2: AppleScript zum Ändern von Einstellungen

Das zweite Skript ist das Hauptskript, das alle Aktionen ausführt, einschließlich der Überprüfung der Laufwerksnamen, ob Safari geöffnet ist oder nicht, und alle anderen Bedingungen zum Ändern der Voreinstellungen. Um es zu erstellen, gehen Sie in den Ordner / Applications / Utilities / und öffnen Sie den AppleScript Editor. Ein leeres Editorfenster wird geöffnet. Wenn es das folgende Skript kopiert, fügen Sie es ein:

- Legen Sie hier den alternativen Laufwerksnamen als Download-Ordner fest

setze dlFolder auf convertHome ("/ Volumes / Downloads")

Anwendung "Finder" mitteilen

Wenn vorhanden [ POSIX-Datei dlFolder], dann

- Nichts tun und den Ordner verwenden

sonst

- Setzen Sie dlFolder auf das Standardverzeichnis

setze dlFolder auf (POSIX-Pfad von ( Pfad zum Basisordner als Text )) & "Downloads"

ende wenn

ende sagen

- aktuellen Pfad von Safari-Plist erhalten

setze currentpath auf convertHome ( tun Sie das Shell-Script "defaults read com.apple.Safari DownloadsPath")

- Pfad nur ändern, wenn die aktuelle Einstellung nicht mit dem Eingabepfad übereinstimmt (es gibt etwas zu ändern)

if (currentpath als Text ) ist nicht gleich (dlFolder als Text ), dann

- Wenn Safari ausgeführt wird, ändern Sie die Einstellungen in den Voreinstellungen von Safari

wenn appIsRunning ("Safari") dann

- Bestimmen Sie die vorderste Anwendung, die wiederhergestellt werden soll, wenn das Skript fertig ist

setze frontApp auf den Pfad zur vordersten Anwendung als Text

- Kopieren Sie den Pfad zum Downloadordner in die Zwischenablage

Setzen Sie die Zwischenablage als Text auf dlFolder

Anwendung "Safari" aktivieren

Anwendung "Systemereignisse" mitteilen, um Anwendungsprozess "Safari" mitzuteilen

- öffnen Sie die Einstellungen oder bringen Sie nach vorne (Fenster 1)

Tastenanschlag ", " mit {Befehl nach unten}

Verzögerung 1 - Pausen in der Fensteranzeige können zu einem Fehler führen, also warten wir eine Sekunde

- Wechseln Sie zur Registerkarte Allgemein

Klicken Sie auf die Schaltfläche "Allgemein" der Werkzeugleiste 1 von Fenster 1

- Ändern Sie den Download-Speicherort in Sonstige

Pop-Up-Button "Speichern der heruntergeladenen Dateien in:" der Gruppe 1 der Gruppe 1 des Fensters "Allgemein"

klicken

Klicken Sie auf den Menüpunkt "Andere ..." in Menü 1 - drei Punkte sind eine Ellipse, keine drei Punkte

ende sagen

- Öffnen Sie das Dialogfeld "Gehe zum Ordner"

Tastenanschlag "g" mit {nach unten, Befehl nach unten}

- Fügen Sie den Ordnerpfad in das Standortfeld ein

Tell- Fenster "Gehe zum Ordner"

Tastenanschlag "v" mit {Befehl nach unten}

Tastenanschlag Rückkehr

ende sagen

Klicken Sie auf die Schaltfläche "Auswählen" von Blatt 1 des Fensters "Allgemein".

- Schließen Sie die Einstellungen

Tastenanschlag "w" mit {Befehl nach unten}

ende sagen

- Wiederherstellen der vordersten Anwendung nach Abschluss des Jobs

Weisen Sie der Anwendung frontApp die Aktivierung zu

sonst

- Wenn Safari NICHT ausgeführt wird, ändern Sie die Einstellungen mit dem Befehl default

do shell script ("Standardwerte schreiben com.apple.Safari DownloadsPath" & dlFolder)

ende wenn

ende wenn

- Funktion zum Konvertieren von Referenzpfaden in vollständige Pfade

auf convertHome (currentpath)

wenn currentpath dann "~ /" enthält

setze oldDelimiter auf die Textelement-Trennzeichen von AppleScript

Setzen Sie AppleScript-Trennzeichen für Textelemente auf {"~ /"}.

setze textPath für jedes Textelement des aktuellen Pfads

Setzen Sie die Begrenzungszeichen für Textelemente von AppleScript auf oldDelimiter

setze currentpath auf POSIX-Pfad von ( Pfad zum Basisordner als Text ) & Eintrag 2 in textPath

ende wenn

Rücklaufpfad

ende convertHome

- Funktion zur Überprüfung, ob die Anwendung "appName" ausgeführt wird (in diesem Fall für Safari verwendet)

auf appIsRunning (appName)

Sagen Sie der Anwendung "System Events" , dass (Name der Prozesse ) appName enthält

end appIsRunning

Der Skripttext ist anfangs violett, aber wenn Sie auf die Symbolleistenschaltfläche Kompilieren klicken oder wenn Sie das Skript speichern, färbt es sich ähnlich wie hier dargestellt. Speichern Sie das Skript unter einem Namen wie "ChangeDownloads" an einem Ort Ihrer Wahl (Sie können es in einem Ordner "Scripts" in Ihrem Verzeichnis Documents oder in Ihrer Benutzerbibliothek ablegen) und den AppleScript-Editor schließen.

Öffnen Sie nun ein neues Terminalfenster und ziehen Sie die neu erstellte Skriptdatei darauf. Wenn Sie dies tun, wird der vollständige Dateipfad zum Skript in das Fenster eingegeben. Dieses sieht etwa wie "/Users/username/Documents/ChangeDownloads.scpt" aus. Wählen Sie mit der Maus den gesamten Dateipfad aus, drücken Sie Befehlstaste-C, um ihn in die Zwischenablage zu kopieren, und kehren Sie zu Text 1 in TextEdit zurück, und ersetzen Sie den Eintrag "FILEPATH" durch Ihren kopierten Text. Dann speichern und schließen Sie das Dokument.

An diesem Punkt sind alle Skripte eingerichtet. Melden Sie sich einfach ab und wieder an, um das Startagenten-Skript (Skript 1) zu laden. Wenn Sie ein Laufwerk mit dem Namen "Downloads" laden, werden die Einstellungen von Safari automatisch geändert, sodass dieses Laufwerk als Downloadordner verwendet wird. Wenn Sie das Laufwerk dann aushängen, wird die Einstellung zurückgesetzt. Das Gleiche wird auch passieren, wenn Sie ein Laufwerk umbenennen, um den Namen "Downloads" zu erhalten, oder den Namen von "Downloads" in etwas anderes ändern.

Beachten Sie, dass dieses Skript zwar funktioniert, jedoch nur unter OS X 10.6 "Snow Leopard" und OS X 10.7 "Lion" unter Safari 5.1 getestet wurde. Bei anderen Systemkonfigurationen, die mindestens Safari 5.0 ausführen, sollte dies jedoch problemlos funktionieren. Die Hauptvoraussetzungen sind, wenn das Skript Safari-Einstellungen innerhalb des Programms bearbeitet, es verwendet Schaltflächenindizes, um verschiedene Menüs zu öffnen und auf die verschiedenen Schaltflächen auf dem Bildschirm zu klicken. Wenn Apple die Einstellungsorganisation in Safari in der Zukunft ändert, funktioniert dieser Teil des Skripts erst, wenn er so bearbeitet wurde, dass er wieder auf die richtigen Schaltflächen zeigt. Dies ist jedoch vorerst eine Einschränkung, mit der wir uns befassen müssen. Um dieses Problem zu umgehen, können Sie in Lion die Funktion Resume von Apple in einem Skript verwenden, um Safari zu beenden, die Einstellungen zu ändern und das Programm neu zu starten, anstatt die Benutzeroberfläche programmieren zu müssen.

Wenn Sie das Skript nicht mehr verwenden möchten, können Sie es deinstallieren, indem Sie die AppleScript-Datei löschen und die LaunchAgent-Datei entweder manuell entfernen oder indem Sie den folgenden Befehl im Terminal ausführen. Wenn dies erledigt ist, loggen Sie sich einfach aus und wieder ein und Sie werden wieder auf Platz eins sein:

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


 

Lassen Sie Ihren Kommentar