Zatímco různé programy a služby na počítači jsou určeny k tomu, aby vám poskytly pohodlí, existují chvíle, kdy budete možná muset provádět opakované úkoly pomocí různých nástrojů a programů v systému. V těchto případech může být použití skriptovacích nástrojů výjimečně užitečné. Na rozdíl od programování, skriptování je, když si vezmete soubor aktuálních nástrojů a nástrojů a automatizujete jejich interakce s příkazy. Například pomocí javascriptu můžete nastavit prohlížeč tak, aby změnil způsob, jakým vykresluje obsah HTML, nebo pomocí nástroje Automator můžete nástroj Finder určit, aby soubor určitým způsobem organizoval.
Nedávno jsem se na CNET obrátil s jedinečnou situací, kde chtěl, aby jeho Mac automaticky změnil složku ke stažení Safari na základě přítomnosti externí jednotky. Myšlenka by zde měla mít Safari stáhnuté soubory ve výchozím adresáři Stahování, ale když připojíte nějakou specifickou externí jednotku (například "thumbdrive" s názvem "Stahování"), pak nechte systém automaticky přepnout adresář stahování Safari na externí jednotku, jelikož může být těžkopádné ji měnit ručně.
Samotný Safari však nemá schopnost to udělat, ale OS X má prostředky, které mohou být použity pro tento účel a budou skriptovány pomocí AppleScript pro správu aplikace Safari a některých služeb OS X, Shell skriptování pro provádění některých akcí, které nepoužívají rozhraní rozhraní a spouštěč systému pro spuštění skriptů pouze při připojení jednotky.
Zpočátku při přemýšlení o tomto problému se řešení může zdát poměrně jednoduché a následující scénář se může zdát jako dobrá odpověď:
- Nastavte skript pro spuštění příkazu "defaults write com.apple.Safari DownloadFolder NAME", chcete-li změnit složku ke stahování na místo určeno "NAME"
- Spusťte tento skript pomocí spouštěče systému pouze tehdy, když je připojena určitá jednotka.
- Opakujte toto s podobným příkazem směřujícím na jiné místo, když již není připojen disk.
Zatímco se tento základní přístup může zdát rozumný, nebude to z mnoha důvodů fungovat. Za prvé, jakmile běží Safari, jediný způsob, jak změnit jeho preference, je prostřednictvím samotného programu. Když program načte, přečte preference do paměti RAM a spravuje tam své nastavení, takže pokud upravíte soubor předvoleb pomocí TextEdit nebo příkazu "výchozí", jak je uvedeno výše, nebude mít žádný vliv na program. Navíc Safari zapíše své předvolby zpět na disk při ukončení, což by přepisovalo jakákoli změněná nastavení.
Navíc tento přístup předpokládá, že systém má k dispozici prostředky, které budou sledovat přítomnost konkrétní jednotky a spustit skript, kdykoli je tato jednotka přítomna, což není případ. Systém může sledovat, zda jsou připojeny disky, ale je zapotřebí další skriptování, aby bylo možné zadat název jednotky, který se má zkontrolovat vždy, když je připojena jednotka.
Nakonec existuje řada nuancí, které je třeba zvážit. Například, protože Safari sám musí být používán pro změnu svých preferencí při spuštění, bude to přinutit ji být nejdůležitější aplikace, kde zůstane, pokud nejste poprvé skript detekovat nejdůležitější aplikace a obnovit jej při úpravách Safari jsou dokončeny. Navíc nechcete skript spustit a spustit aktivní program kolem, když je připojena libovolná náhodná jednotka.
Z těchto důvodů musí skript obsahovat následující pět úvah:
- Spustit pouze v případě, že je připojena nová jednotka
- Změňte nastavení pouze v případě, že je připojena jednotka nazvaná "Stahování" (nebo jakýkoli název, který je označen)
- Podmiňte se s jeho přístupem ke změně nastavení toho, zda je Safari aktuálně spuštěn nebo ne
- Změňte nastavení pouze v případě, že je k dispozici nové požadované umístění ke stažení
- Mají schopnost obnovit nejdůležitější aplikaci, pokud skript potřebuje přejít na Safari
Chcete-li tyto možnosti implementovat, je třeba vytvořit dva skripty. První je pro spouštěč systému "laund", který by byl použit k monitorování bodů připojení jednotky k systému, aby se zjistilo, zda byla nebo nebyla připojena nová jednotka. Pokud ano, spustí skript, který zkontroluje název jednotky, zjistí, zda je Safari spuštěn, a pak změní nastavení programu Safari pouze v případě, že se liší od výběru externí jednotky, ale pokud není přítomen, použijte výchozí složku Stahování .
Script 1: LaunchAgent pro sledování disků
První skript, který je třeba provést, je spouštěč systému, který se nazývá Spouštěč. Chcete-li jej vytvořit, otevřete Terminál a zadejte následující příkaz (zjednodušeně jej zkopírujte a vložte):
klepnutím na ~ / Library / LaunchAgents / local.ChangeSafariDownload.plist
Když je to hotovo, otevřete jej v TextEdit spuštěním následujícího příkazu:
otevřít -e ~ / Library / LaunchAgents / local.ChangeSafariDownload.plist
Nyní byste měli mít otevřený dokument TextEdit, zkopírujte do něj následující text a uložte dokument, ale nechte ho nyní otevřený. Budete muset změnit sekci "FILEPATH" pro změnu umístění skriptu:
Značka local.ChangeSafariDownloads QueueDirectories WatchPaths / svazky Program / usr / bin / osascript ProgramArguments osascript FILEPATH
Při přihlášení se tento skript načte do procesu spouštění systému a poskytne mu podmínky a pokyny pro spuštění hlavního skriptu pro úpravu preferencí Safari. V takovém případě bude spouštěč informován, aby sledoval adresář / svazky, aby zjistil, zda dojde k nějakým změnám v tomto adresáři. Vzhledem k tomu, že je to místo, kde jsou připojeny souborové systémy, kdykoli je jednotka připojena nebo odpojena od systému, spustí se spuštění hlavního skriptu.
Skript 2: AppleScript pro změnu nastavení
Druhý skript je hlavní, který bude provádět všechny akce, včetně kontroly názvů jednotek, bez ohledu na to, zda je Safari otevřený, nebo jakékoliv jiné podmínky pro změnu předvoleb. Chcete-li jej vytvořit, přejděte do složky / Applications / Utilities / a otevřete program AppleScript Editor. Otevře se prázdné okno editoru a při kopírování a vkládání následujícího skriptu:
- Nastavte alternativní název disku, který chcete použít jako složku ke stažení zde
nastavit dlFolder na konvertHome ("/ Objemy / Stahování")
řekněte aplikaci "Finder"
pokud existuje [ POSIX soubor dlFolder]
- Nečinte nic a použijte složku
jiný
- nastavte dlFolder na výchozí domovský adresář
nastavte parametr dlFolder na cestu POSIX ( cesta k domovské složce jako text )) a "Stažení"
konec, pokud
konec říci
- dostat aktuální cestu z safari plist
nastavit currentpath na konvertHome ( do shellu skript "výchozí read com.apple.Safari DownloadsPath")
- změnit cestu pouze v případě, že aktuální nastavení neodpovídá vstupní cestě (je třeba něco změnit)
pokud (currentpath jako text ) není rovno (dlFolder jako text ) pak
- Pokud běží Safari, změňte nastavení přes Safari preference
pokud appIsRunning ("Safari") pak
- určení nejpřednější aplikace pro obnovení při dokončení skriptu
nastavte frontApp na cestu k přední aplikaci jako text
- zkopírujte cestu ke složce ke schránce
nastavte schránku na text dlFolder jako text
aktivovat aplikaci "Safari"
řekněte aplikaci "Systémové události", abyste zjistili, že proces "Safari"
- otevřete předvolby nebo přejděte na přední stranu (okno 1)
stisknutím klávesy ", " pomocí příkazu {down down}
zpoždění 1 - pauzy v zobrazení okna mohou způsobit chybu, takže počkáme na chvíli
- Změňte kartu Obecné
klikněte na tlačítko "Obecné" na panelu nástrojů 1 v okně 1
- Změňte umístění stahování na jiný
řekněte vyskakovací tlačítko "Uložení stažených souborů do:" ze skupiny 1 ve skupině 1 okna "Obecné"
klikněte na tlačítko
klikněte na položku nabídky "Ostatní ..." nabídky 1 - tři tečky jsou elipsa, ne tři období
konec říci
- Otevřete dialogové okno "Jdi do složky"
stisknutím klávesy "g" pomocí příkazu {shift down, příkazem dolů}
- Vložit pole cesty do pole umístění
řekněte okno "Jdi do složky"
stisknutím klávesy "v" pomocí příkazu {down down}
návrat klávesy
konec říci
klikněte na tlačítko "Vybrat" v listu 1 v okně "Obecné"
- zavřete předvolby
stisknutím klávesy "w" pomocí příkazu {down down}
konec říci
- obnovit přední aplikaci po dokončení úlohy
řekněte aplikaci frontApp, aby se aktivovala
jiný
- Pokud služba Safari NENÍ spuštěna, použijte příkaz výchozí pro změnu nastavení
do shellu skript ("výchozí psát com.apple.Safari DownloadPath" & dlFolder)
konec, pokud
konec, pokud
- Funkce převodu odkazů domovské cesty na plné cesty
na konvertovat domov (aktuální cesta)
pokud aktuální cesta obsahuje "~ /" poté
nastavte oldDelimiter na oddělovače textových položek AppleScript
nastavte oddělovače textových položek AppleScript na {"~ /"}
nastavte textPath na každou textovou položku aktuální cesty
nastavte oddělovače textových položek AppleScript na oldDelimiter
nastavte aktuální cestu na cestu POSIX ( cesta k domovské složce jako text ) a položka 2 v textPath
konec, pokud
návratová dráha
end convertHome
- Funkce pro kontrolu, zda je spuštěna aplikace "appName" (v tomto případě se používá pro Safari)
na appIsRunning (appName)
řekněte aplikaci "Systémové události" na (název procesů ) obsahuje appName
end appIsRunning
Text skriptu bude zpočátku fialový, ale když klepnete na tlačítko na panelu nástrojů Kompilace nebo uložíte skript, pak se zbarví podobně, jako to vidíte zde. Uložit skript s názvem jako "ChangeDownloads" na místo, které si zvolíte (můžete jej umístit do složky "Skripty" v adresáři Dokumenty nebo v uživatelské knihovně) a zavřít editor AppleScript.
Nyní otevřete nové okno Terminálu a přetáhněte do něj nově vytvořený soubor skriptu. Když to provedete, do okna se vloží úplná cesta k souboru, která bude vypadat jako "/Users/username/Documents/ChangeDownloads.scpt". Pomocí myši vyberte celou cestu k souboru, stiskněte Command-C pro její zkopírování do schránky a přejděte zpět do skriptu 1 v TextEdit a nahraďte položku "FILEPATH" kopírovaným textem. Potom dokument uložte a zavřete.
V tomto okamžiku jsou všechny skripty nastaveny. Stačí se odhlásit a přihlásit zpět a načíst spouštěcí skript agenta (Script 1) a teď, když připojíte jednotku s názvem "Stahování", nastavení Safari se změní automaticky, takže použije tuto jednotku jako složku ke stažení. Pokud odpojíte pohon, nastavení se vrátí zpět. Totéž se stane, pokud přejmenujete jednotku s názvem "Stahování" nebo změníte její název z "Stahování" na něco jiného.
Mějte na paměti, že zatímco tento skript funguje, byl testován pouze na OS X 10.6 "Snow Leopard" a OS X 10.7 "Lion" se systémem Safari 5.1; nicméně by to mělo fungovat dobře v jiných konfiguracích systému, které běží alespoň Safari 5.0. Hlavní požadavky jsou, když skript manipuluje s preferencími programu Safari v rámci programu, pomocí indexů tlačítek otevře různé nabídky a klikne na různá tlačítka na obrazovce. Pokud Apple v budoucnu změní organizaci preferencí v programu Safari, pak tato část skriptu nebude fungovat, dokud nebude upravena, aby znovu ukázala správná tlačítka. Pro tuto chvíli však musíme vyřešit omezení. Jedním řešením pro toto v Lionu je využít funkce Apple Resumé ve skriptu, abyste ukončili Safari, provést změny nastavení a poté spustit program namísto nutnosti naprogramovat rozhraní.
A konečně, pokud se rozhodnete, že již tento skript nechcete, můžete jej odinstalovat odstraněním souboru AppleScript a následným odstraněním souboru LaunchAgent buď ručně, nebo spuštěním následujícího příkazu v Terminálu. Když to bude hotovo, odhlaste se a přihlaste se zpět a vrátíte se do čtverce:
rm ~ / knihovna / LaunchAgents / local.ChangeSafariDownload.plist
Zanechte Svůj Komentář