AppleScript-plezier: automatisch de downloadmap van Safari wijzigen

Hoewel de verschillende programma's en services op een computer bedoeld zijn om u gemak te bieden, zijn er soms momenten waarop u repetitieve taken moet uitvoeren met behulp van de verschillende hulpprogramma's en programma's op het systeem. In dergelijke gevallen kan het gebruik van scriptingtools uitzonderlijk nuttig zijn. In tegenstelling tot programmeren, is scripting wanneer u een set van huidige hulpprogramma's en hulpprogramma's neemt en hun interacties met opdrachten automatiseert. Met Javascript kun je een browser bijvoorbeeld vertellen hoe het HTML-inhoud rendert, of met Automator kun je de Finder vertellen om bestanden op een bepaalde manier te ordenen.

Onlangs benaderde een collega hier bij CNET mij met een unieke situatie, waarbij hij wilde dat zijn Mac automatisch de map met downloads van Safari zou veranderen op basis van de aanwezigheid van een externe schijf. Het idee hier zou zijn om Safari gedownloade bestanden in de standaard Downloads-map te laten plaatsen, maar wanneer je een specifieke externe schijf (zoals een thumbdrive genaamd "Downloads") aansluit, dan moet het systeem automatisch de downloads-map van Safari naar de externe schijf verplaatsen, omdat het omslachtig kan zijn om het handmatig te wijzigen.

Jammer genoeg heeft Safari zelf niet de mogelijkheid om dit te doen, maar OS X heeft bronnen die hiervoor kunnen worden gebruikt en gescript worden met AppleScript voor het beheren van de Safari-applicatie en sommige OS X-services, Shell-scripting om wat acties uit te voeren die niet gebruiken de toepassingsinterface en het systeemstartprogramma om alleen de scripts uit te voeren wanneer een station is aangesloten.

In eerste instantie lijkt de oplossing bij het nadenken over dit probleem redelijk eenvoudig en lijkt het volgende scenario een goed antwoord:

  1. Stel een script in om de opdracht "defaults write com.apple.Safari DownloadFolder NAME" uit te voeren om de downloadmap te wijzigen naar de locatie die is opgegeven door "NAME"
  2. Voer dit script alleen uit met de systeemstarter als een specifiek station is aangesloten.
  3. Herhaal dit met een soortgelijk commando dat naar een andere locatie wijst wanneer het station niet langer is aangesloten.

Hoewel deze basisbenadering redelijk lijkt, zal deze om een ​​aantal redenen niet werken. Ten eerste, als Safari eenmaal draait, is de enige manier om zijn voorkeuren te veranderen via het programma zelf. Wanneer het programma wordt geladen, worden de voorkeuren in RAM gelezen en worden de instellingen daar beheerd, dus als u het voorkeurenbestand bewerkt met TextEdit of de opdracht "Defaults" zoals hierboven vermeld, heeft dit geen effect op het programma. Verder schrijft Safari zijn voorkeuren terug naar de schijf wanneer deze wordt afgesloten, wat alle gewijzigde instellingen zou overschrijven.

Bovendien gaat deze benadering ervan uit dat het systeem over bronnen beschikt die de aanwezigheid van een specifieke schijf controleren en het script activeren wanneer die schijf aanwezig is, wat niet het geval is. Het systeem kan controleren of schijven zijn aangesloten, maar extra scripting is nodig om een ​​schijfnaam op te geven die moet worden gecontroleerd wanneer een schijfeenheid is aangesloten.

Ten slotte zijn er een aantal nuances te overwegen. Omdat Safari zelf bijvoorbeeld moet worden gebruikt om zijn voorkeuren te veranderen tijdens het hardlopen, zal dit dwingen tot de meest vooraanstaande applicatie, waar het zal blijven tenzij je eerst het script de belangrijkste applicatie laat detecteren en het terugzetten wanneer de aanpassingen aan Safari zijn voltooid. Bovendien wilt u niet dat het script wordt uitgevoerd en dat het actieve programma wordt omgeleid wanneer een willekeurig station wordt gekoppeld.

Om deze reden zou het script de volgende vijf overwegingen moeten bevatten:

  1. Lanceer alleen wanneer een nieuwe schijf is aangesloten
  2. Wijzig alleen de instellingen als een station met de naam "Downloads" (of een andere naam) is bijgevoegd
  3. Wees voorwaardelijk bij het benaderen van het wijzigen van instellingen om te bepalen of Safari op dit moment wordt gestart
  4. Wijzig alleen de instellingen als een nieuwe gewenste downloadlocatie aanwezig is
  5. De mogelijkheid hebben om de belangrijkste toepassing te herstellen als het script moet overschakelen naar Safari

Om deze opties te implementeren, moeten er twee scripts worden gemaakt. De eerste is voor de "launchd" van de systeemwerper die zou worden gebruikt om de drive-mountpunten van het systeem te controleren, om te zien of een nieuwe schijf is aangesloten en gemonteerd. Als dit het geval is, wordt het script gestart dat de stationsnaam controleert, wordt gecontroleerd of Safari wordt uitgevoerd en vervolgens de instellingen van Safari alleen wijzigt als deze verschillen van het kiezen van de externe schijf, maar als deze niet aanwezig is, gebruikt u de standaardmap Downloads. .

Script 1: LaunchAgent voor het monitoren van schijven

Het eerste script dat moet worden gemaakt, is voor de systeembesturingsprogramma, die een opstartagent wordt genoemd. Om het te maken, open je de Terminal en typ je de volgende opdracht (kopieer en plak het voor de eenvoud):

raak ~ / Library / LaunchAgents / local.ChangeSafariDownload.plist aan

Wanneer dit is gebeurd, opent u het in TextEdit door de volgende opdracht uit te voeren:

open -e ~ / Library / LaunchAgents / local.ChangeSafariDownload.plist

U moet nu een leeg TextEdit-document openen, dus kopieer de volgende tekst erin en sla het document op, maar houd het voor nu open. U moet de sectie "FILEPATH" wijzigen om de locatie van het script te wijzigen:

 Label local.ChangeSafariDownloads QueueDirectories WatchPaths / Volumes Programma / usr / bin / osascript ProgramArgumenten osascript FILEPATH 

Wanneer u zich aanmeldt, wordt dit script in het systeemaanloopprogramma geladen en krijgt het voorwaarden en instructies voor het uitvoeren van het hoofdscript voor het bewerken van de voorkeuren van Safari. In dit geval wordt het opstartprogramma opgedragen om de map / Volumes te bekijken om te zien of er binnen die map wijzigingen optreden. Aangezien dit is waar bestandssystemen zijn gemount, zal op elk moment dat een schijf wordt aangesloten of losgekoppeld van het systeem, dit het hoofdscript activeren.

Script 2: AppleScript voor het wijzigen van instellingen

Het tweede script is het hoofdscript dat alle acties uitvoert, inclusief het controleren van stationsnamen, of Safari is geopend of andere voorwaarden voor het wijzigen van de voorkeuren. Om het te maken, gaat u naar de / Programma's / Hulpprogramma's / map en opent u het AppleScript Editor-programma. Een leeg bewerkingsvenster wordt geopend en wanneer het het volgende script erin kopieert en plakt:

- Stel hier de alternatieve schijfnaam in die u wilt gebruiken als downloadmap

stel dlFolder in om Home om te zetten ("/ Volumes / Downloads")

vertel de applicatie "Finder"

indien bestaat [ POSIX-bestand dlFolder] dan

- Doe niets en gebruik de map

anders

- stel dlFolder in op de standaard basismap

stel dlFolder in op (POSIX-pad van ( pad naar thuismap als tekst )) & "Downloads"

stop als

einde vertellen

- haal het huidige pad van safari plist

stel currentpath in om naar huis te converteren ( do shell script "standaard lees com.apple.Safari DownloadsPath")

- Wijzig het pad alleen als de huidige instelling niet overeenkomt met het invoerpad (er is iets dat kan worden gewijzigd)

als (huidig ​​pad als tekst ) niet gelijk is aan (dlFolder als tekst ) dan

- als Safari wordt uitgevoerd, wijzigt u de instellingen via de voorkeuren van Safari

als appIsRunning ("Safari") dan

- bepaal de voorste applicatie die moet worden hersteld wanneer het script is voltooid

zet frontApp op pad naar voorste applicatie als tekst

- kopieer het downloadmap-pad naar het klembord

stel het klembord in op dlFolder als tekst

applicatie "Safari" activeren

vertel de applicatie "Systeemgebeurtenissen" om het aanvraagproces "Safari" te vertellen

- open de voorkeuren of breng naar voren (venster 1)

toetsaanslag ", " met {opdracht omlaag}

vertraging 1 - pauzes in de vensterweergave kunnen een fout veroorzaken, dus we wachten een seconde

- Ga naar het tabblad Algemeen

klik op de knop "Algemeen" van werkbalk 1 van venster 1

- Verander de downloadlocatie naar Other

vertel de pop-upknop "Bewaarde bestanden opslaan naar:" van groep 1 van groep 1 van het venster "Algemeen"

Klik

klik op menuoptie "Overige ..." van menu 1 - drie stippen is een ellips, geen drie punten

einde vertellen

- Open het dialoogvenster "Ga naar map"

toetsaanslag "g" met behulp van {shift down, command down}

- Plak het mappad in het locatieveld

tell venster "Ga naar map"

toetsaanslag "v" met {command down}

toetsaanslag terug

einde vertellen

klik op de knop "Selecteren" van blad 1 van het venster "Algemeen"

- sluit de voorkeuren

toetsaanslag "w" met {command down}

einde vertellen

- herstel de voorste toepassing nadat de taak is voltooid

vertel application frontApp om te activeren

anders

- als Safari NIET actief is, gebruik dan de standaardinstellingen om de voorkeuren te wijzigen

do shell script ("standaard schrijf com.apple.Safari DownloadsPath" & dlFolder)

stop als

stop als

- Functie voor het converteren van verwijzingen naar het thuispad naar volledige paden

op convertHome (currentpath)

als currentpath "~ /" bevat, dan

stel oldDelimiter in op de tekstitembegrenzers van AppleScript

stel de tekstitembegrenzers van AppleScript in op {"~ /"}

zet textPath op elk tekstitem van currentpath

stel de tekstitembegrenzers van AppleScript in op oldDelimiter

stel currentpath in op POSIX-pad van ( pad naar eigen map als tekst ) & item 2 in textPath

stop als

stuur het huidige pad terug

einde convertHome

- Functie om te controleren of de toepassing "appName" actief is (in dit geval gebruikt voor Safari)

op appIsRunning (appName)

tell applicatie "Systeemgebeurtenissen" naar (naam van processen ) bevat appName

einde appIsRunning

De tekst van het script zal in eerste instantie paars zijn, maar als u op de werkbalkknop Compileren klikt of als u het script opslaat, wordt het in kleur gebracht, vergelijkbaar met wat u hier ziet. Sla het script op met een naam als "ChangeDownloads" naar een locatie van uw keuze (u kunt het plaatsen in een map "Scripts" in uw map Documenten of in uw gebruikersbibliotheek) en de AppleScript-editor sluiten.

Open nu een nieuw Terminal-venster en sleep het nieuw gemaakte scriptbestand ernaar toe. Wanneer u dit doet, wordt het volledige pad naar het script in het venster ingevoerd, dat er ongeveer zo uitziet als "/Users/username/Documents/ChangeDownloads.scpt." Selecteer met de muis het volledige pad, druk op Command-C om het naar het klembord te kopiëren en ga terug naar Script 1 in Teksteditor en vervang het item "FILEPATH" door de gekopieerde tekst. Sla het document vervolgens op en sluit het.

Op dit punt zijn de scripts allemaal ingesteld. Log uit en log weer in om het opstartagent-script te laden (Script 1) en als u nu een station met de naam "Downloads" koppelt, worden de Safari-instellingen automatisch gewijzigd, zodat het station wordt gebruikt als de downloadmap. Als u vervolgens de drive ontkoppelt, wordt de instelling teruggezet. Hetzelfde gebeurt ook als u de naam van een station met de naam "Downloads" wijzigt of de naam van "Downloads" wijzigt in iets anders.

Houd er rekening mee dat hoewel dit script werkt, het alleen is getest onder OS X 10.6 "Snow Leopard" en OS X 10.7 "Lion" met Safari 5.1; het zou echter prima moeten werken op andere systeemconfiguraties die tenminste Safari 5.0 draaien. De belangrijkste vereisten zijn wanneer het script de voorkeuren van Safari vanuit het programma manipuleert, het gebruikt knopindices om verschillende menu's te openen en op de verschillende knoppen op het scherm te klikken. Als Apple in de toekomst de voorkeurenorganisatie in Safari wijzigt, zal dit deel van het script niet werken totdat het is bewerkt om opnieuw naar de juiste knoppen te verwijzen. Voor nu is dat echter een beperking waar we mee te maken zullen hebben. Een workaround hiervoor in Lion is om te profiteren van de hervattingsfunctie van Apple in een script om Safari te verlaten, de voorkeuren te wijzigen en vervolgens het programma opnieuw te starten in plaats van de interface te moeten programmeren.

Als u tot slot besluit dit script niet meer te willen, kunt u het verwijderen door het AppleScript-bestand te verwijderen en het LaunchAgent-bestand handmatig te verwijderen of door de volgende opdracht in de terminal uit te voeren. Wanneer dit is gebeurd, logt u uit en logt u weer in en bent u weer zover:

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


 

Laat Een Reactie Achter