Zabava AppleScript: samodejno spreminjanje mape Safari's downloads

Medtem ko so različni programi in storitve na računalniku namenjeni temu, da vam nudijo udobje, so časi, ko boste morda morali opravljati ponavljajoče se naloge z uporabo različnih orodij in programov v sistemu. V teh primerih je lahko uporaba skriptnih orodij izjemno koristna. Za razliko od programiranja je skriptiranje, ko vzamete niz trenutnih orodij in pripomočkov ter avtomatizirate njihove interakcije z ukazi. Na primer, s pomočjo Javascripta lahko brskalniku poveste, naj spremeni način prikaza vsebine HTML, ali pa z orodjem Automator povej Finderju, naj datoteke organizira na določen način.

Pred kratkim mi je kolega na CNET-u pristopil z edinstveno situacijo, kjer je želel, da bi njegov Mac samodejno spremenil Safarijevo mapo s prenosi, ki temelji na prisotnosti zunanjega pogona. Zamisel bi bila, da Safari postavi prenesene datoteke v privzeti imenik »Prenosi«, ko pa priložite poseben zunanji pogon (npr. Prenosni računalnik »Downloads«), potem sistem samodejno preklopi imenik prenosov Safari na zunanji pogon., ker je lahko težavno ročno spreminjati.

Na žalost sam Safari nima možnosti za to, toda OS X ima vire, ki jih je mogoče uporabiti za to in se skriptira z uporabo AppleScripta za upravljanje aplikacije Safari in nekaterih storitev OS X, skriptni Shell za izvajanje nekaterih dejanj, ki ne uporabljajo vmesnik aplikacije in sistemski zaganjalnik za izvajanje samo skriptov, ko je priključen pogon.

Na začetku, ko razmišljate o tej težavi, se zdi, da je rešitev dokaj preprosta, in naslednji scenarij se morda zdi dober odgovor:

  1. Nastavite skript za zagon ukaza »privzeto napiši com.apple.Safari DownloadFolder NAME«, da spremenite mapo za prenos na lokacijo, ki jo je določil »NAME«
  2. Zaženite ta skript z zaganjalnikom sistema samo, ko je priključen določen pogon.
  3. To ponovite s podobnim ukazom, ki kaže na drugo lokacijo, ko pogon ni več priključen.

Čeprav se ta osnovni pristop zdi razumen, ne bo deloval iz več razlogov. Prvič, ko Safari teče, je edini način za spreminjanje njegovih nastavitev skozi sam program. Ko se program naloži, bo prebral nastavitve v RAM in tam upravljal njegove nastavitve, tako da če urejate datoteko z nastavitvami TextEdit ali "defaults", kot je navedeno zgoraj, potem to ne bo vplivalo na program. Poleg tega Safari zapiše svoje nastavitve nazaj na disk, ko zapre, kar bi prepisalo vse spremenjene nastavitve.

Poleg tega ta pristop predpostavlja, da ima sistem na voljo vire, ki bodo spremljali prisotnost določenega pogona in sprožili skript vsakokrat, ko je ta prisoten, kar pa ne drži. Sistem lahko spremlja, ali so priključeni pogoni, vendar bi bilo potrebno dodatno skriptiranje, da se določi ime pogona, ki ga je treba preveriti, ko je priključen.

Nazadnje je treba razmisliti o številnih odtenkih. Na primer, ker mora biti sam Safari uporabljen za spreminjanje svojih nastavitev med izvajanjem, bo to prisililo, da je najpomembnejša aplikacija, kjer bo ostala, razen če najprej skript odkrije najbolj zahtevno aplikacijo in jo obnovi, ko spremembe v Safariju so popolni. Poleg tega ne želite, da se skript zažene in spremeni aktivni program, ko je priključen kateri koli naključni pogon.

Zaradi tega mora scenarij vključevati naslednjih pet premislekov:

  1. Zaženi samo, ko je priključen nov pogon
  2. Spremenite nastavitve le, če je priključen pogon z imenom »Prenosi« (ali katero koli prezrto ime)
  3. Pogoj za spreminjanje nastavitev, ali je Safari trenutno zagnan, je pogoj
  4. Spremenite nastavitve le, če je prisotna nova želena lokacija prenosa
  5. Imate možnost obnoviti najpomembnejšo aplikacijo, če mora skript preklopiti na Safari

Za izvedbo teh možnosti je treba ustvariti dva skripta. Prvi je, da bo zaganjalnik sistema "launchd", ki se bo uporabljal za spremljanje točk namestitve pogona sistema, preveril, ali je nov pogon priključen ali nameščen. Če je tako, bo zagnal skript, ki bo preveril ime pogona, preveril, ali je Safari zagnan ali ne, in spremenil Safarijeve nastavitve le, če se razlikujejo od primarnega izbiranja zunanjega pogona, če pa ga ni, uporabite privzeto mapo Prenosi. .

Skript 1: LaunchAgent za spremljanje pogonov

Prvi skript, ki ga naredite, je za zaganjalnik sistema, ki se imenuje zagonski agent. Če želite ustvariti, odprite terminal in vnesite naslednji ukaz (kopirajte in prilepite za preprostost):

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

Ko je to storjeno, ga odprite v programu TextEdit, tako da zaženete naslednji ukaz:

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

Zdaj bi morali imeti odprt prazen dokument TextEdit, zato kopirajte naslednje besedilo v njega in shranite dokument, vendar ga za zdaj ohranite odprtega. Če želite spremeniti lokacijo skripta, morate spremeniti razdelek »FILEPATH«:

 Oznaka local.ChangeSafariDownloade QueueDirectoriesPaths / Volumes Program / usr / bin / osascript ProgramArguments osascript FILEPATH 

Ko se prijavite, se bo ta skript naložil v proces zagona sistema in mu dali pogoje in navodila za zagon glavnega skripta za urejanje Safarijevih nastavitev. V tem primeru bo zaganjalnik obveščen, naj si ogleda imenik / Volumes, da ugotovi, ali pride do sprememb v tem imeniku. Ker so tam nameščeni datotečni sistemi, bo vsakič, ko je pogon priključen ali ločen od sistema, to sprožilo zagon glavnega skripta.

Skript 2: AppleScript za spreminjanje nastavitev

Drugi scenarij je glavni, ki bo izvajal vsa dejanja, vključno s preverjanjem imen pogonov, ne glede na to, ali je Safari odprt, in vse druge pogoje za spreminjanje nastavitev. Če ga želite ustvariti, pojdite v mapo / Applications / Utilities / in odprite program AppleScript Editor. Odprlo se bo prazno okno urejevalnika in ko bo kopiralo in prilepilo naslednjo skripto:

- Nastavite alternativno ime pogona, ki ga boste uporabili kot mapo za prenos

nastavite dlFolder na convertHome ("/ Volumes / Downloads")

povej aplikaciji "Finder"

Če obstaja [ POSIX datoteka dlFolder], potem

- Naredite nič in uporabite mapo

drugače

- nastavite dlFolder na privzeti domači imenik

nastavite dlFolder na (pot POSIX od ( pot do domače mape kot besedilo )) & "Prenosi"

končati, če

end tell

- dobite trenutno pot iz safari plist

nastavite currentpath na convertHome ( naredite ukazni skript "privzeto beri com.apple.Safari DownloadsPath")

- spremenite pot samo, če se trenutna nastavitev ne ujema z vhodno potjo (kaj je treba spremeniti)

če (trenutna pot kot besedilo ) ni enaka (dlFolder kot besedilo ), potem

- če se Safari izvaja, spremenite nastavitve prek nastavitev Safari

nato appIsRunning ("Safari")

- določite najnovejšo aplikacijo, ki jo želite obnoviti, ko je skript opravljen

nastavite frontApp na pot do najstarejše aplikacije kot besedilo

- kopirajte pot do mape za prenos v odložišče

nastavite odložišče na dlFolder kot besedilo

aktiviraj aplikacijo »Safari«

povej aplikaciji "Sistemski dogodki", da pove aplikacijskemu procesu "Safari"

- odprete nastavitve ali pripeljite naprej (okno 1)

pritiska na tipko ", " z ukazom {command down}

zamuda 1 - premori v prikazu okna lahko povzročijo napako, zato počakamo sekundo

- Spremenite zavihek Splošno

kliknite gumb "Splošno" orodne vrstice 1 okna 1

- Spremenite mesto prenosa v Drugo

gumb pop up up "Shrani prenesene datoteke v:" skupine 1 skupine 1 okna "Splošno"

kliknite

kliknite menijsko točko "Drugo ..." menija 1 - tri pike je elipsa, ne tri obdobja

end tell

- Odprite pogovorno okno »Pojdi v mapo«

tipko "g" z uporabo {shift down, ukaz down}

- Prilepite pot do mape v polje lokacije

povej okno "Pojdi v mapo"

tipko "v" z ukazom {command down}

vrnitev tipk

end tell

kliknite gumb "Izberi" lista 1 okna "Splošno"

- zaprite nastavitve

pritisk na tipko "w" z uporabo {command down}

end tell

- po končanem opravilu obnovite aplikacijo

za aktiviranje obvestite aplikacijo frontApp

drugače

- če se Safari NE izvaja, nato z ukazom privzete nastavitve spremenite

naredite ukazni skript ("privzeto napišite com.apple.Safari DownloadsPath" & dlFolder)

končati, če

končati, če

- Funkcija za pretvorbo sklicevanja domače poti na polne poti

v storitvi convertHome (currentpath)

če currentpath vsebuje "~ /", potem

nastavi oldDelimiter na ločnice za besedilne elemente AppleScripta

nastavite ločila besedilnih elementov AppleScript na {"~ /"}

nastavi textPath na vsako besedilo v trenutni poti

nastavite razmejitelje besedilnega elementa AppleScript na oldDelimiter

nastavite currentpath na pot POSIX od ( pot do mape doma kot besedilo ) in element 2 v textPath

končati, če

vrne currentpath

end convertHome

- Funkcija za preverjanje, ali se aplikacija "appName" izvaja (v tem primeru se uporablja za Safari)

na appIsRunning (ime aplikacije)

povej aplikaciji "Sistemski dogodki" na (ime procesov ) vsebuje appName

konec aplikacije

Besedilo skripta bo najprej vijolično, ko pa kliknete gumb orodne vrstice Prevedi ali če shranite skript, bo barva podobna tistemu, kar vidite tukaj. Shranite skript z imenom, kot je "ChangeDownloads", na mesto po vaši izbiri (postavite ga lahko v mapo "Skripti" v imeniku Dokumenti ali v uporabniški knjižnici) in zaprite urejevalnik AppleScript.

Zdaj odprite novo okno Terminala in povlecite novo izdelano datoteko skripta. Ko boste to naredili, bo v okno vnesena celotna pot do skripta, ki bo izgledala kot "/Users/username/Documents/ChangeDownloads.scpt." Z miško izberite celotno pot datoteke, pritisnite Command-C, da jo kopirate v odložišče, in se vrnite v Script 1 v TextEdit in zamenjajte vnos "FILEPATH" s kopiranim besedilom. Nato shranite in zaprite dokument.

Na tej točki so skripte vse nastavljene. Samo odjavite se in se ponovno prijavite, da naložite skript za zagonskega agenta (Script 1), zdaj pa, ko namestite pogon, ki se imenuje »Prenosi«, se bodo Safarijeve nastavitve samodejno spremenile, tako da uporabijo ta pogon kot mapo za prenos. Če nato odklopite pogon, se nastavitev vrne. Enako se bo zgodilo tudi, če preimenujete pogon, ki se imenuje »Prenosi« ali spremenite njegovo ime iz »Prenosi« v nekaj drugega.

Ne pozabite, da je ta skript deloval samo na OS X 10.6 "Snow Leopard" in OS X 10.7 "Lion", ki je zagnal Safari 5.1; vendar pa bi moralo delovati v redu tudi pri drugih sistemskih konfiguracijah, ki delujejo vsaj Safari 5.0. Glavne zahteve so, ko skripta manipulira s Safarijevimi nastavitvami znotraj programa, uporablja kazala gumbov za odpiranje različnih menijev in klikanje različnih gumbov na zaslonu. Če Apple v prihodnje spremeni organizacijo preferenc v Safariju, ta del skripta ne bo deloval, dokler ga ne uredite, tako da boste ponovno prikazali ustrezne gumbe. Vendar je za zdaj to omejitev, s katero se bomo morali spopasti. Ena rešitev za to v Lionu je izkoristiti funkcijo Apple Resume v skriptu, da zaprete Safari, spremenite nastavitve in nato znova zaženete program, namesto da programirate vmesnik.

Nazadnje, če se odločite, da ne želite več te skripte, jo lahko odstranite tako, da izbrišete datoteko AppleScript in nato odstranite datoteko LaunchAgent ročno ali z izvajanjem naslednjega ukaza v terminalu. Ko se to zgodi, se odjavite in ponovno prijavite, nato pa se vrnete na prvo mesto:

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


 

Pustite Komentar