AppleScript Fun: Ändra automatiskt Safaris nedladdningsmapp

Medan de olika programmen och tjänsterna på en dator är avsedda att erbjuda dig bekvämlighet, finns det tillfällen då du kan behöva göra repetitiva uppgifter med hjälp av olika verktyg och program på systemet. I dessa fall kan användningen av skriptverktyg vara exceptionellt användbar. Till skillnad från programmering är scripting när du tar en uppsättning aktuella verktyg och verktyg och automatiserar deras interaktioner med kommandon. Till exempel med Javascript kan du berätta för en webbläsare att ändra hur det gör HTML-innehåll, eller med Automator kan du berätta för Finder att organisera filer på ett visst sätt.

Nyligen kontaktade en kollega här på CNET mig en unik situation där han ville få sin Mac att automatiskt ändra Safaris nedladdningsmapp baserat på närvaron av en extern enhet. Tanken här skulle vara att ha Safari placerade nedladdade filer i standarddownloads-mappen, men när du bifogar en specifik extern enhet (t.ex. en tumdriven kallad "Nedladdningar"), så att systemet automatiskt byter Safari-hämtningskatalogen till den externa enheten, eftersom det kan vara besvärligt att fortsätta ändra det manuellt.

Tyvärr har Safari själv inte möjlighet att göra detta, men OS X har resurser som kan användas för detta och skriptas med AppleScript för att hantera Safari-programmet och vissa OS X-tjänster, Shell-skript för att utföra vissa åtgärder som inte använder applikationsgränssnittet och systemstartaren för att bara köra skript när en enhet är ansluten.

Ursprungligen när man tänker på detta problem kan lösningen tyckas ganska enkel och följande scenario kan tyckas vara ett bra svar:

  1. Ställ in ett skript för att köra kommandot "standardvärden skriv com.apple.Safari DownloadFolder NAME" för att ändra nedladdningsmappen till den plats som anges av "NAME"
  2. Kör det här skriptet med systemrapporteraren endast när en specifik enhet är ansluten.
  3. Upprepa detta med ett liknande kommando som pekar på en annan plats när enheten inte längre är ansluten.

Även om detta grundläggande tillvägagångssätt kan verka rimligt, kommer det inte att fungera av ett antal skäl. Först, när Safari körs är det enda sättet att ändra sina preferenser genom själva programmet. När programmet laddas läser du inställningarna i RAM och hanterar inställningarna där, så om du ändrar inställningsfilen med TextEdit eller "default" -kommandot som nämnts ovan kommer det inte att ha någon effekt på programmet. Dessutom skriver Safari sina preferenser tillbaka till disken när de upphör, vilket skulle skriva över alla ändrade inställningar.

Dessutom förutsätter detta tillvägagångssätt att systemet har resurser tillgängliga som övervakar närvaron av en specifik enhet och utlöser skriptet när den enheten är närvarande, vilket inte är fallet. Systemet kan övervaka huruvida enheter är anslutna, men ytterligare skript behövs för att ange ett drivnamn för att kontrollera när en enhet är ansluten.

Slutligen finns det ett antal nyanser att överväga. Eftersom Safari självt behöver användas för att ändra sina preferenser när de körs, kommer det att tvinga det att vara den främsta applikationen, där den kommer att förbli om du inte först har skriptet upptäcka den främsta applikationen och återställ det när ändringarna till Safari är färdiga. Dessutom vill du inte att skriptet ska springa och swtich det aktiva programmet runt när någon slumpmässig enhet är ansluten.

På grund av dessa skulle skriptet innehålla följande fem överväganden:

  1. Starta först när en ny enhet är ansluten
  2. Ändra bara inställningar om en enhet som heter "Nedladdningar" (eller något desried name) är bifogat
  3. Var villkorlig i sitt förhållningssätt för att ändra inställningar om huruvida Safari för närvarande är igång
  4. Ändra bara inställningar om en ny önskad nedladdningsplats är närvarande
  5. Har möjlighet att återställa den främsta applikationen om skriptet behöver byta till Safari

För att implementera dessa alternativ måste två skript skapas. Den första är för system launcher "launchd" som skulle användas för att övervaka systemets drivmonteringspunkter, för att se om en ny enhet har fästs och monterats. Om så är fallet startar det skriptet som kommer att kontrollera drivnamnet, se om Safari körs eller inte, och ändra sedan Safari-inställningarna endast om de skiljer sig från att välja den externa enheten, men om den inte är närvarande, använd den vanliga nedladdningsmappen .

Skript 1: LaunchAgent för övervakning av enheter

Det första skriptet att göra är för systemstartaren, som kallas ett startverktyg. För att skapa det, öppna Terminal och skriv följande kommando (kopiera och klistra in det för enkelhet):

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

När detta är klart, öppna det i TextEdit genom att köra följande kommando:

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

Du ska nu ha ett tomt TextEdit-dokument öppet, så kopiera följande text till det och spara dokumentet, men håll det öppet för nu. Du måste ändra avsnittet "FILEPATH" för att ändra scriptets plats:

 Etikett local.ChangeSafariDownloads QueueDirectories WatchPaths / Volumes Program / usr / bin / osascript ProgramArguments osascript FILEPATH 

När du loggar in laddas det här skriptet i systemstartprocessen och ger det villkor och instruktioner för att köra huvudskriptet för att redigera Safaris inställningar. I det här fallet kommer lanseringen att få veta att man tittar på katalogen / volymerna för att se om det finns några ändringar i den katalogen. Eftersom det här är där filsystem är monterade, närhelst en enhet är ansluten eller fristående från systemet kommer detta att utlösa huvudskriptet att köra.

Skript 2: AppleScript för att ändra inställningar

Det andra skriptet är det viktigaste som ska utföra alla åtgärder, inklusive kontroll av drivnamn, huruvida Safari är öppet och andra villkor för att ändra inställningarna. För att skapa det, gå till / Program / Verktyg / mapp och öppna AppleScript Editor-programmet. Ett tomt redigeringsfönster öppnas, och när det kopierar och klistrar in följande skript i det:

- Ange alternativt drivnamn för att använda som nedladdningsmapp här

sätt dlFolder att convertHome ("/ Volumes / Downloads")

berätta ansökan "Finder"

om det finns [ POSIX-fil dlFolder]

- Gör ingenting och använd mappen

annan

- sätt dlFolder till standard hemkatalog

sätt dlFolder till (POSIX-sökvägen till ( sökväg till hemmapp som text )) & "Nedladdningar"

avsluta om

slutet berätta

- få den aktuella vägen från safariplist

ställa in currentpath till convertHome ( gör skalskriptet "standardvärden läs com.apple.Safari DownloadsPath")

- Ändra sökvägen endast om den nuvarande inställningen inte matchar inmatningsbanan (det finns något att ändra)

om (currentpath som text ) inte är lika med (dlFolder som text )

- Om Safari körs, ändra inställningar genom Safari: s inställningar

om appIsRunning ("Safari")

- bestämma den främsta applikationen för att återställa när man har skrivit

ställa in frontApp till sökväg till främsta applikationen som text

- kopiera nedladdningsmappen till klippbordet

sätt klippbordet till dlFolder som text

aktivera programmet "Safari"

berätta ansökan "System Events" för att berätta ansökan processen "Safari"

- öppna inställningarna eller ta fram (fönster 1)

tangenttryckning ", " använder {command down}

fördröjning 1 - pauser i fönsterskärmen kan leda till ett fel, så vi väntar en sekund

- Ändra till fliken Allmänt

klicka på knappen "Allmänt" i verktygsfältet 1 i fönstret 1

- Ändra nedladdningsläge till Annan

berätta popup-knappen "Spara nedladdade filer till:" i grupp 1 i grupp 1 i fönstret "Allmänt"

klick

klicka på menyalternativet "Övrigt ..." i meny 1 - tre prickar är en ellips, inte tre perioder

slutet berätta

- Öppna dialogrutan "Gå till mapp"

tangenttryck "g" med {shift down, command down}

- Klistra in mappbanan i platsfältet

berätta fönstret "Gå till mapp"

tangenttryck "v" med {command down}

knapptryckning tillbaka

slutet berätta

klicka på knappen "Välj" av blad 1 i fönstret "Allmänt"

- stäng preferenserna

tangenttryck "w" med {command down}

slutet berätta

- Återställ främsta applikationen efter att jobbet är klart

berätta ansökan frontApp att aktivera

annan

- Om Safari inte körs, använd sedan standardinställningarna för att ändra inställningarna

gör skalskript ("standardvärden skriv com.apple.Safari DownloadsPath" & dlFolder)

avsluta om

avsluta om

- Funktion för att konvertera hemvägsreferenser till hela banor

convertHome (currentpath)

om currentpath innehåller "~ /"

ställa in oldDelimiter till AppleScripts textavgränsare

ange AppleScripts textavgränsare till {"~ /"}

sätt textPath till varje textpost av currentpath

Ställ AppleScripts textavgränsare till oldDelimiter

Ställ in currentpath till POSIX-sökvägen till ( sökväg till hemmapp som text ) och punkt 2 i textPath

avsluta om

returnera currentpath

avsluta convertHome

- Funktion för att kontrollera om applikationen "appName" körs (i detta fall används för Safari)

appIsRunning (appName)

berätta ansökan "Systemhändelser" till (namn processer ) innehåller appName

avsluta applikationen

Skriptets text kommer initialt att vara lila, men när du klickar på knappen Kompilera verktygsfältet eller om du sparar skriptet blir det färgat liknande det du ser här. Spara skriptet med ett namn som "ChangeDownloads" till en plats du vill ha (du kan placera den i en "Scripts" -mapp i dokumentkatalogen eller i ditt användarbibliotek) och stänga AppleScript-editoren.

Öppna nu ett nytt Terminal-fönster och dra den nyskapade skriptfilen till den. När du gör det kommer hela filvägen till manuset att skrivas in i fönstret, vilket kommer att se ut som "/Users/username/Documents/ChangeDownloads.scpt." Använd musen genom att markera hela filbanan, tryck på Command-C för att kopiera den till klippbordet och gå tillbaka till Script 1 i TextEdit och ersätt "FILEPATH" -posten med din kopierade text. Spara och stäng sedan dokumentet.

Vid denna tidpunkt är skripten uppbyggda. Bara logga ut och logga in igen för att ladda skriptet för lanseringsagent (Script 1), och nu när du monterar en enhet som heter "Nedladdningar" kommer Safari inställningar automatiskt att ändras så att den använder den här enheten som hämtningsmappen. Om du sedan avmonterar enheten kommer inställningen att återställas. Samma sak kommer också hända om du byter namn på en enhet som heter "Nedladdningar" eller byter namn från "Nedladdningar" till något annat.

Tänk på att medan det här skriptet fungerar har det bara testats på OS X 10.6 "Snow Leopard" och OS X 10.7 "Lion" som kör Safari 5.1; Det ska dock fungera bra på andra systemkonfigurationer som kör minst Safari 5.0. De viktigaste kraven är när manuset hanterar Safaris preferenser inom programmet, det använder knappindex för att öppna olika menyer och klicka på de olika knapparna på skärmen. Om Apple ändrar preferensorganisationen i Safari i framtiden, fungerar den här delen av skriptet inte förrän den redigeras för att peka på rätt knappar igen. Men för det här är det en begränsning som vi måste ta itu med. En lösning för detta i Lion är att utnyttja Apples CV-funktion i ett skript för att avsluta Safari, ändra inställningarna och starta om programmet istället för att behöva programmera gränssnittet.

Slutligen, om du bestämmer dig för att du inte vill ha det här skriptet längre, kan du avinstallera det genom att radera AppleScript-filen och sedan ta bort LaunchAgent-filen antingen manuellt eller genom att köra följande kommando i terminalen. När detta är klart logga bara ut och logga in igen, och du kommer tillbaka till fyrkant 1:

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


 

Lämna Din Kommentar