AppleScript Fun: Ændrer automatisk Safari's downloads folder

Mens de forskellige programmer og tjenester på en computer er ment at give dig bekvemmelighed, er der tidspunkter, hvor du måske skal gøre gentagne opgaver ved hjælp af de forskellige værktøjer og programmer på systemet. I disse tilfælde kan brugen af ​​scriptværktøjer være yderst nyttigt. I modsætning til programmering er scripting, når du tager et sæt nuværende værktøjer og værktøjer og automatiserer deres interaktioner med kommandoer. For eksempel kan du med Javascript fortælle en browser at ændre den måde, hvorpå det gør HTML-indhold, eller med Automator kan du fortælle Finder at organisere filer på en bestemt måde.

For nylig har en kollega her hos CNET kontaktet mig med en unik situation, hvor han ønskede at få sin Mac automatisk at ændre Safari's downloads folder baseret på tilstedeværelsen af ​​et eksternt drev. Ideen her ville være at have Safari placerede downloadede filer i standard Downloads-mappen, men når du vedhæfter et bestemt eksternt drev (f.eks. En thumbdrive kaldet "Downloads"), så skal systemet automatisk skifte Safari's downloads-mappe til det eksterne drev, da det kan være besværligt at holde det manuelt.

Desværre har Safari ikke evnen til at gøre dette, men OS X har ressourcer, der kan bruges til dette og scriptes ved hjælp af AppleScript til styring af Safari-applikationen og nogle OS X-tjenester, Shell-scripting til at udføre nogle handlinger, der ikke bruger applikationsgrænsefladen og systemstarteren for kun at køre scriptsne, når et drev er tilsluttet.

I starten, når man tænker på dette problem, kan løsningen virke ret ligetil, og følgende scenario kan virke som et godt svar:

  1. Opsæt et script for at køre kommandoen "standardindstillinger skriv com.apple.Safari DownloadFolder NAME" for at ændre overførselsmappen til den placering, der er angivet af "NAME"
  2. Kør dette script kun ved hjælp af system launcher, når et bestemt drev er vedhæftet.
  3. Gentag dette med en lignende kommando, der peger på en anden placering, når drevet ikke længere er tilsluttet.

Selv om denne grundlæggende tilgang kan virke rimelig, vil den ikke fungere af en række årsager. For det første, når Safari kører, er den eneste måde at ændre sine præferencer på gennem selve programmet. Når programmet indlæser det, vil det læse præferencerne i RAM og administrere dets indstillinger der, så hvis du redigerer præferencefilen ved hjælp af TextEdit eller "default" -kommandoen som nævnt ovenfor, har den ingen effekt på programmet. Desuden skriver Safari sine præferencer tilbage til disken, når de afslutter, hvilket ville overskrive eventuelle ændrede indstillinger.

Desuden forudsætter denne fremgangsmåde, at systemet har ressourcer til rådighed, der vil overvåge tilstedeværelsen af ​​et bestemt drev og udløse scriptet, når det pågældende drev er til stede, hvilket ikke er tilfældet. Systemet kan overvåge, om drev er tilsluttet, men yderligere scripting ville være nødvendigt for at angive et drevnavn for at kontrollere, om et drev er tilsluttet.

Endelig er der en række nuancer at overveje. For eksempel, da Safari selv skal bruges til at ændre sine præferencer, når de kører, vil det tvinge det til at være den største applikation, hvor det vil forblive, medmindre du først har scriptet registrerer den fremste applikation og gendanner det, når ændringerne til Safari er komplette. Desuden ønsker du ikke at scriptet skal køre og swtich det aktive program rundt, når en tilfældig drev er vedhæftet.

På grund af disse skal scriptet indeholde følgende fem overvejelser:

  1. Start kun, når et nyt drev er tilsluttet
  2. Du skal kun ændre indstillinger, hvis et drev med navnet "Downloads" (eller ethvert desried name) er vedhæftet
  3. Være betinget af dens tilgang til at ændre indstillinger om, hvorvidt Safari for øjeblikket er startet
  4. Du skal kun ændre indstillinger, hvis der er en ny ønsket downloadplacering
  5. Har evnen til at gendanne den forreste applikation, hvis scriptet skal skifte til Safari

For at implementere disse indstillinger skal der oprettes to scripts. Den første er til system launcher "launchd", som ville blive brugt til at overvåge systemets drevmonteringspunkter for at se om et nyt drev er blevet tilsluttet og monteret. Hvis det er tilfældet, vil det starte scriptet, der kontrollerer drevnavnet, se om Safari kører, og derefter kun ændre Safari-indstillingerne, hvis de adskiller sig fra primært at vælge det eksterne drev, men hvis den ikke er til stede, skal du bruge standard Downloads-mappen .

Script 1: LaunchAgent til overvågning af drev

Det første script til at lave er for system launcher, som kaldes en launch agent. For at oprette det skal du åbne Terminal og skrive følgende kommando (kopi og indsæt det for at gøre det lettere):

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

Når dette er gjort, skal du åbne det i TextEdit ved at køre følgende kommando:

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

Du skal nu have et tomt TextEdit-dokument åbent, så kopier følgende tekst til det og gem dokumentet, men hold det åbent for nu. Du skal ændre sektionen "FILEPATH" for at ændre scriptets placering:

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

Når du logger ind, vil dette script blive indlæst i system launcher processen og give det betingelser og instruktioner for at køre hovedskriptet til redigering af Safaris præferencer. I dette tilfælde vil lanceringsprogrammet blive bedt om at se mappen / volumener for at se, om der sker ændringer i den pågældende mappe. Da dette er her, hvor filsystemer er monteret, vil det altid være et drev, der er vedhæftet eller løsrevet fra systemet. Dette vil udløse hovedskriptet til at køre.

Script 2: AppleScript for at ændre indstillinger

Det andet script er det vigtigste, der vil udføre alle handlinger, herunder kontrol af navne, uanset om Safari er åbent og eventuelle andre betingelser for ændring af præferencerne. For at oprette det, skal du gå til mappen / Programmer / Hjælpeprogrammer / mappe og åbne AppleScript Editor-programmet. Et tomt editor-vindue åbnes, og når det kopierer og indsætter følgende script i det:

- Indstil alternativt drevnavn til brug som downloads-mappe her

indstil dlFolder til convertHome ("/ Volumes / Downloads")

Fortæl ansøgningen "Finder"

hvis eksisterer [ POSIX fil dlFolder] derefter

- Gør ingenting og brug mappen

andet

- Indstil dlFolder til standard home directory

indstil dlFolder til (POSIX sti til ( sti til hjemmemappe som tekst )) & "Downloads"

Afslut Hvis

ende fortælle

- Få den nuværende vej fra safari-plist

indstil currentpath til convertHome ( do shell script "standardindstillinger læs com.apple.Safari DownloadsPath")

- Skift kun sti, hvis den nuværende indstilling ikke stemmer overens med indtastningsvejen (der er noget at ændre)

hvis (currentpath som tekst ) ikke er lig med (dlFolder som tekst )

- Hvis Safari kører, skal du ændre indstillinger via Safari's indstillinger

hvis appIsRunning ("Safari") derefter

- Bestem den forreste applikation, der skal gendannes, når scriptet er færdigt

sæt frontApp til sti til forreste applikation som tekst

- Kopier download-mappen til klippebordet

Indstil klippebordet til dlFolder som tekst

aktiver applikation "Safari"

fortæl applikationen "System Events" for at fortælle ansøgningsprocessen "Safari"

- Åbn præferencerne eller bring til fronten (vindue 1)

tastetryk ", " ved hjælp af {command down}

forsinkelse 1 - pauser i vinduesvisning kan resultere i en fejl, så vi venter et sekund

- Skift til fanen Generelt

klik på knappen "Generelt" værktøjslinje 1 i vindue 1

- Skift downloadlokation til Andet

fortæl pop op-knappen "Gem downloadede filer til:" i gruppe 1 i gruppe 1 i vinduet "Generelt"

klik

klik på menupunktet "Andre ..." i menu 1 - tre prikker er en ellipse, ikke tre perioder

ende fortælle

- Åbn dialogboksen "Gå til mappe"

tastetryk "g" ved hjælp af {skift ned, kommando ned}

- Indsæt mappestien i placeringsfeltet

fortæl vinduet "Gå til mappe"

tastetryk "v" ved hjælp af {command down}

tastetryk retur

ende fortælle

klik på knappen "Vælg" af ark 1 i vinduet "General"

- Luk præferencerne

tastetryk "w" ved hjælp af {command down}

ende fortælle

- Gendan den forreste applikation, når jobbet er færdigt

fortæl applikation frontApp for at aktivere

andet

- Hvis Safari IKKE kører, skal du bruge standardindstillingerne til at ændre indstillingerne

gør shell script ("standardindstillinger write com.apple.Safari DownloadsPath" & dlFolder)

Afslut Hvis

Afslut Hvis

- Funktion til at konvertere hjemmevejreferencer til fulde stier

convertHome (currentpath)

hvis currentpath indeholder "~ /"

indstil oldDelimiter til AppleScript's tekstelementafgrensere

sæt AppleScript's tekstelementafgrensere til {"~ /"}

Indstil tekstPath til hvert tekstelement af currentpath

indstil AppleScript's tekstelement afgrænser til oldDelimiter

indstil currentpath til POSIX sti til ( sti til hjemmemappe som tekst ) & punkt 2 i textPath

Afslut Hvis

returner currentpath

ende convertHome

- Funktion til at kontrollere om applikationen "appName" kører (i dette tilfælde bruges til Safari)

appIsRunning (appName)

fortæl applikationen "System Events" til (navn processer ) indeholder appName

afslutte applikationer

Scriptets tekst vil oprindeligt være lilla, men når du klikker på knappen Kompilér værktøjslinje, eller hvis du gemmer scriptet, bliver det farvet som det, du ser her. Gem scriptet med et navn som "ChangeDownloads" til et sted efter eget valg (du kan placere det i en "Scripts" -mappe i din Dokumenter-mappe eller i dit brugerbibliotek) og lukke AppleScript-editoren.

Nu åbner du et nyt Terminal vindue og trækker den nyoprettede scriptfil til den. Når du gør dette, vil den fulde filsti til scriptet blive indtastet i vinduet, som vil se lidt ud som "/Users/username/Documents/ChangeDownloads.scpt." Brug musen til at vælge hele filbanen, tryk på Command-C for at kopiere den til udklipsholderen og gå tilbage til Script 1 i TextEdit og erstat "FILEPATH" -indgangen med din kopierede tekst. Gem derefter og luk dokumentet.

På dette tidspunkt er scriptene alle oprettet. Bare log ud og log ind for at indlæse lanceringsagent scriptet (Script 1), og nu, når du monterer et drev, der hedder "Downloads", vil Safari-indstillingerne blive ændret automatisk, så det bruger det pågældende drev som downloads-mappen. Hvis du derefter afmonterer drevet, vil indstillingen blive vendt tilbage. Det samme sker også, hvis du omdøber et drev, der hedder "Downloads" eller ændrer navn fra "Downloads" til noget andet.

Husk, at mens dette script fungerer, er det kun testet på OS X 10.6 "Snow Leopard" og OS X 10.7 "Lion", der kører Safari 5.1; Det skal dog fungere fint på andre systemkonfigurationer, der kører mindst Safari 5.0. De vigtigste krav er, når scriptet manipulerer Safaris præferencer inde fra programmet, det bruger knapindekser til at åbne forskellige menuer og klikke på de forskellige knapper på skærmen. Hvis Apple ændrer præferenceorganisationen i Safari i fremtiden, fungerer denne del af scriptet ikke, før den er redigeret for at pege på de rigtige knapper igen. Men for nu er det en begrænsning, vi bliver nødt til at håndtere. En løsning i dette i Lion er at udnytte Apples CV-funktion i et script for at afslutte Safari, gøre præferencerne ændrede og genstart programmet, i stedet for at skulle programmere grænsefladen.

Endelig, hvis du beslutter dig for ikke at bruge dette script længere, kan du afinstallere det ved at slette AppleScript-filen og derefter fjerne LaunchAgent-filen enten manuelt eller ved at køre følgende kommando i Terminal. Når dette er gjort, skal du bare logge ud og logge ind igen, og du vil være tilbage til firkantet en:

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


 

Efterlad Din Kommentar