Mens de ulike programmene og tjenestene på en datamaskin er ment å gi deg bekvemmelighet, er det tidspunkter når du må kanskje gjøre repeterende oppgaver ved hjelp av de ulike verktøyene og programmene på systemet. I slike tilfeller kan bruk av skriptverktøy være svært nyttig. I motsetning til programmering er skripting når du tar et sett med gjeldende verktøy og verktøy og automatiserer samspillet med kommandoer. For eksempel, med Javascript kan du fortelle en nettleser å endre måten det gjør på HTML-innhold, eller med Automator kan du fortelle Finder å organisere filer på en bestemt måte.
Nylig en kollega her hos CNET nærmet meg med en unik situasjon, der han ønsket å få sin Mac automatisk å endre Safari's nedlastingsmappe basert på tilstedeværelsen av en ekstern stasjon. Ideen her ville være å ha Safari plasserte nedlastede filer i standard nedlastings-katalogen, men når du legger til en bestemt ekstern disk (for eksempel en miniatyrdriver kalt "Nedlastinger"), må du automatisk bytte Safari-nedlastingskatalogen til den eksterne stasjonen, siden det kan være tungvint å fortsette å endre det manuelt.
Dessverre har Safari ikke muligheten til å gjøre dette, men OS X har ressurser som kan brukes til dette og skriptes ved hjelp av AppleScript for å administrere Safari-programmet og noen OS X-tjenester, Shell-skript for å utføre noen handlinger som ikke bruker programgrensesnittet og systemstarteren for bare å kjøre skriptene når en stasjon er koblet til.
Først når man tenker på dette problemet, kan løsningen virke ganske grei, og følgende scenario kan virke som et godt svar:
- Sett opp et skript for å kjøre kommandoen "standardverdier skriv com.apple.Safari DownloadFolder NAME" for å endre nedlastingsmappen til stedet spesifisert av "NAME"
- Kjør dette skriptet bare ved hjelp av systemstarteren når en bestemt stasjon er koblet til.
- Gjenta dette med en lignende kommando som peker på et annet sted når stasjonen ikke lenger er festet.
Selv om denne grunnleggende tilnærmingen kan virke rimelig, vil den ikke fungere for en rekke grunner. Først, når Safari kjører, er den eneste måten å endre sine preferanser på gjennom selve programmet. Når programmet laster, vil det lese innstillingene i RAM og administrere innstillingene der, så hvis du redigerer preferansefilen ved hjelp av TextEdit eller "standard" -kommandoen som nevnt ovenfor, vil det ikke ha noen effekt på programmet. Videre skriver Safari sine preferanser tilbake til disken når de avsluttes, noe som vil overskrive eventuelle endrede innstillinger.
I tillegg antar denne tilnærmingen at systemet har ressurser tilgjengelig som vil overvåke tilstedeværelsen av en bestemt stasjon og utløse skriptet når den stasjonen er til stede, hvilket ikke er tilfelle. Systemet kan overvåke om stasjoner er tilkoblet, men det vil være nødvendig med ekstra skript for å spesifisere et stasjonsnavn for å sjekke når en stasjon er koblet til.
Til slutt er det en rekke nyanser å vurdere. For eksempel, siden Safari selv trenger å bli brukt til å endre preferanser når det kjøres, vil det tvinge det til å være den fremste applikasjonen, der den vil forbli, med mindre du først har skriptet oppdager den fremste applikasjonen og gjenoppretter den når modifikasjonene til Safari er ferdig. I tillegg vil du ikke at skriptet skal kjøre og swtich det aktive programmet rundt når en tilfeldig stasjon er festet.
På grunn av disse skal skriptet inneholde følgende fem overveielser:
- Start kun når en ny stasjon er koblet til
- Endre bare innstillinger hvis en stasjon som heter "Nedlastinger" (eller et hvilket som helst desried navn) er vedlagt
- Vær betinget av sin tilnærming til å endre innstillinger om hvorvidt Safari for øyeblikket er lansert
- Bare endre innstillinger hvis en ny ønsket nedlastingsplass er tilstede
- Har muligheten til å gjenopprette den fremste applikasjonen hvis skriptet må bytte til Safari
For å implementere disse alternativene må to skript opprettes. Den første er for systemstarteren "launchd" som skulle brukes til å overvåke systemets stasjonsmonteringspunkter, for å se om en ny stasjon har blitt festet og montert. I så fall vil det starte skriptet som vil sjekke stasjonsnavnet, se om Safari kjører, og endre deretter Safari-innstillingene bare hvis de avviger fra å velge den eksterne stasjonen, men hvis den ikke er tilstede, bruk standard nedlastingsmappe .
Skript 1: LaunchAgent for overvåking av stasjoner
Det første skriptet som skal gjøres er for systemstarteren, som kalles en lanseringsagent. For å opprette det, åpne Terminal og skriv inn følgende kommando (kopier og lim det inn for enkelhet):
trykk ~ / Bibliotek / LaunchAgents / local.ChangeSafariDownload.plist
Når dette er gjort, åpner du det i TextEdit ved å kjøre følgende kommando:
open -e ~ / Library / LaunchAgents / local.ChangeSafariDownload.plist
Du bør nå ha et tomt TextEdit-dokument åpent, så kopier følgende tekst til det og lagre dokumentet, men hold det åpent for nå. Du må endre delen "FILEPATH" for å endre skriptets plassering:
Etikett local.ChangeSafariDownloads QueueDirectories WatchPaths / Volumes Program / usr / bin / osascript ProgramArguments osascript FILEPATH
Når du logger på, lastes dette skriptet inn i systemstarterprosessen og gir det forhold og instruksjoner for å kjøre hovedskriptet for redigering av Safaris preferanser. I dette tilfellet vil lanseringsprogrammet bli fortalt å se katalogen / volum for å se om det oppstår endringer i katalogen. Siden dette er hvor filsystemer er montert, vil hver gang en stasjon er festet eller løsrevet fra systemet dette utløse hovedskriptet til å kjøre.
Skript 2: AppleScript for å endre innstillinger
Det andre skriptet er det viktigste som vil utføre alle handlinger, inkludert å sjekke kjørenavn, om Safari er åpent og eventuelle andre forhold for å endre preferansene. For å lage det, gå til / Programmer / Verktøy / mappe og åpne AppleScript Editor-programmet. Et tomt redigeringsvindu åpnes, og når det kopieres og limes inn følgende skript i det:
- Angi alternativt stasjonsnavn for bruk som nedlastingsmappe her
sett dlFolder til convertHome ("/ Volumes / Downloads")
Fortell søknad "Finder"
hvis eksisterer [ POSIX-fil dlFolder] da
- Ikke gjør noe og bruk mappen
ellers
- sett dlFolder til standard hjemmekatalog
sett dlFolder til (POSIX-banen til ( sti til hjemmemappe som tekst )) og "Nedlastinger"
slutt om
slutt tell
- Få nåværende sti fra safari-plist
sett currentpath to convertHome ( gjør shell script "standardinnstillinger les com.apple.Safari DownloadsPath")
- Endre banen bare hvis den gjeldende innstillingen ikke samsvarer med inngangsstien (det er noe å endre)
hvis (nåværende spor som tekst ) ikke er lik (dlFolder som tekst ) da
- Hvis Safari kjører, endrer du innstillingene gjennom Safari's preferanser
hvis appIsRunning ("Safari") da
- fastslå den fremste applikasjonen for å gjenopprette når skriptet er ferdig
sett frontApp å sti til frontmost applikasjon som tekst
- kopier nedlastingsmappen til utklippstavlen
sett utklippstavlen til dlFolder som tekst
aktiver søknad "Safari"
fortell programmet "System Events" for å fortelle søknadsprosessen "Safari"
- Åpne preferansene eller ta fram til fronten (vindu 1)
tastetrykk ", " bruk {command down}
forsinkelse 1 - pauser i vinduet kan føre til en feil, så vi venter et sekund
- Endre til kategorien Generelt
klikk på "Generelt" på verktøylinje 1 i vindu 1
- Endre nedlastingsstedet til Annet
fortell pop up-knappen "Lagre nedlastede filer til:" i gruppe 1 i gruppe 1 i vinduet "Generelt"
klikk
klikk menyelementet "Annet ..." i meny 1 - tre prikker er en ellipse, ikke tre perioder
slutt tell
- Åpne dialogboksen "gå til mappe"
tastetrykk "g" ved hjelp av {skift ned, kommando ned}
- Lim inn mappebanen til plasseringsfeltet
fortell vinduet "Gå til mappe"
tastetrykk "v" ved å bruke {command down}
tastetrykk tilbake
slutt tell
klikk knappen "Velg" av ark 1 i vinduet "Generelt"
- Lukk preferansene
tastetrykk "w" ved hjelp av {kommando ned}
slutt tell
- Gjenopprett frontmost søknad etter at jobben er fullført
Fortell programmet frontApp for å aktivere
ellers
- Hvis Safari ikke kjører, bruk standardinnstillingene for å endre innstillingene
gjør shell script ("standard skriv com.apple.Safari DownloadsPath" & dlFolder)
slutt om
slutt om
- Funksjon for å konvertere hjemmebasertreferanser til fulle baner
på convertHome (currentpath)
hvis currentpath inneholder "~ /" da
sett oldDelimiter til AppleScripts tekstbegrensninger
sett AppleScript-tekstbegrensninger til {"~ /"}
sett tekstPath til hvert tekstelement av CurrentPath
sett AppleScripts tekstelementbegrensninger til oldDelimiter
sett nåværende path til POSIX-banen til ( vei til hjemmemappe som tekst ) og element 2 i textPath
slutt om
returnere strømmen
avslutte convertHome
- Funksjon for å sjekke om søknaden "appName" kjører (i dette tilfellet brukes til Safari)
på appIsRunning (appName)
fortell programmet "System Events" til (navn på prosesser ) inneholder appName
avslutte applikasjonen
Skriptets tekst vil i utgangspunktet være lilla, men når du klikker på kompilere verktøylinjeknappen eller hvis du lagrer skriptet, blir det fargelagt som det du ser her. Lagre skriptet med et navn som "ChangeDownloads" til et sted du ønsker (du kan plassere det i en "Skript" -mappe i dokumentmappen din eller i brukerbiblioteket) og lukke AppleScript-editoren.
Åpne nå et nytt Terminal-vindu og dra den nyopprettede skriptfilen til den. Når du gjør dette, legges hele filbanen til skriptet inn i vinduet, som vil se ut som "/Users/username/Documents/ChangeDownloads.scpt." Bruk musen ved å velge hele filbanen, trykk på Command-C for å kopiere den til utklippstavlen, og gå tilbake til Skript 1 i TextEdit og erstatt "FILEPATH" -oppføringen med den kopierte teksten. Lagre og lukk dokumentet.
På dette punktet er alle skriptene satt opp. Bare logg ut og logg inn for å laste lanseringsagentskriptet (Script 1), og nå når du monterer en stasjon som heter "Nedlastinger", vil Safari-innstillingene endres automatisk, slik at den bruker den stasjonen som nedlastingsmappen. Hvis du deretter avmonterer stasjonen, vil innstillingen bli tilbakestilt. Det samme vil også skje hvis du omdøper en stasjon som heter "Nedlastinger" eller endrer navn fra "Nedlastinger" til noe annet.
Husk at mens dette skriptet fungerer, har det bare blitt testet på OS X 10.6 "Snow Leopard" og OS X 10.7 "Lion" som kjører Safari 5.1; Det skal imidlertid fungere fint på andre systemkonfigurasjoner som kjører minst Safari 5.0. Hovedkravene er når manuset manipulerer Safaris preferanser fra programmet, det bruker knappindekser for å åpne ulike menyer og klikke på de forskjellige knappene på skjermen. Hvis Apple endrer preferanseorganisasjonen i Safari i fremtiden, vil denne delen av skriptet ikke fungere før den er redigert for å peke på de riktige knappene igjen. Men for nå er det en begrensning vi må håndtere. En løsning for dette i Lion er å utnytte Apples CV-funksjon i et skript for å avslutte Safari, endre innstillingene, og deretter starte programmet på nytt i stedet for å programmere grensesnittet.
Til slutt, hvis du bestemmer deg for at du ikke vil ha dette skriptet lenger, kan du avinstallere det ved å slette AppleScript-filen og deretter fjerne LaunchAgent-filen enten manuelt eller ved å kjøre følgende kommando i Terminal. Når dette er gjort, logg deg ut og logg inn igjen, og du kommer tilbake til firkantet en:
rm ~ / Bibliotek / LaunchAgents / local.ChangeSafariDownload.plist
Legg Igjen Din Kommentar