Докато различните програми и услуги на компютър са предназначени да ви предложат удобство, има моменти, когато може да се наложи да извършвате повтарящи се задачи, като използвате различните инструменти и програми в системата. В тези случаи използването на скриптови инструменти може да бъде изключително полезно. За разлика от програмирането, скриптовете са, когато използвате набор от текущи инструменти и помощни програми и автоматизирате техните взаимодействия с команди. Например, с Javascript можете да кажете на браузъра да промени начина, по който представя HTML съдържание, или с Automator можете да кажете на Finder да организира файлове по определен начин.
Наскоро колега тук в CNET се обърна към мен с уникална ситуация, където искаше Mac му да промени автоматично папката за изтегляне на Safari, базирана на наличието на външно устройство. Идеята е Safari да постави изтеглените файлове в директорията за изтегляне по подразбиране, но когато прикачите конкретно външно устройство (например thumbdrive, наречено "Downloads"), тогава системата автоматично ще прехвърли директорията за изтегляне на Safari на външното устройство., тъй като е трудно да се променя ръчно.
За съжаление самият Safari няма възможност да направи това, но OS X има ресурси, които могат да бъдат използвани за това и да бъдат скриптове, използвайки AppleScript за управление на приложението Safari и някои OS X услуги, Shell скриптове за извършване на някои действия, които не използват интерфейса на приложението и системния стартер само за изпълнение на скриптовете, когато е свързано устройство.
Първоначално, когато се мисли за този проблем, решението може да изглежда доста лесно, а следният сценарий може да изглежда като добър отговор:
- Настройте скрипт, за да изпълните командата „по подразбиране напишете com.apple.Safari DownloadFolder NAME“, за да промените папката за изтегляне до местоположението, посочено от „NAME“
- Стартирайте този скрипт с помощта на системния стартер само когато е прикрепено определено устройство.
- Повторете това с подобна команда, която сочи към друго място, когато устройството вече не е свързано.
Въпреки че този основен подход може да изглежда разумно, той няма да работи по редица причини. Първо, след като Safari работи, единственият начин да промените предпочитанията си е чрез самата програма. Когато програмата зареди, тя ще прочете предпочитанията в RAM и ще управлява настройките си там, така че ако редактирате файла с предпочитания с помощта на TextEdit или командата "defaults", както е споменато по-горе, то няма да има ефект върху програмата. Освен това, Safari записва своите предпочитания обратно на диска, когато излезе, което би презаписало всички променени настройки.
В допълнение, този подход предполага, че системата разполага с налични ресурси, които да следят наличието на конкретно устройство и да задействат скрипта, когато това устройство е налице, което не е така. Системата може да следи дали устройствата са свързани или не, но ще са необходими допълнителни скриптове, за да се укаже име на устройство, за да се провери, когато устройството е свързано.
И накрая, има редица нюанси, които трябва да се вземат под внимание. Например, тъй като самата Safari трябва да се използва, за да промени предпочитанията си, когато се изпълнява, това ще я накара да бъде най-основното приложение, където ще остане, освен ако първо не накарате скрипта да открие най-предното приложение и да го възстанови, когато промените в Safari са завършени. Освен това, не искате скриптът да работи и да превключва активната програма наоколо, когато е прикрепен произволен диск.
Поради това скриптът трябва да включва следните пет съображения:
- Стартирайте само когато прикачите ново устройство
- Променяйте само настройките, ако е прикрепено устройство с име „Изтегляния“ (или произволно име)
- Бъдете условни в подхода си за промяна на настройките за това дали Safari в момента е стартиран
- Променяйте настройките само ако е налице ново желано място за изтегляне
- Имате възможност да възстановите предишното приложение, ако скриптът трябва да премине към Safari
За да се реализират тези опции, трябва да се създадат два скрипта. Първият е за стартирането на системата "launchd", който ще се използва за наблюдение на точките на монтиране на системата, за да се види дали е прикрепено или монтирано ново устройство. Ако е така, тогава ще стартира скрипта, който ще провери името на устройството, ще види дали Safari работи или не, и след това ще промени настройките на Safari само ако те се различават от основното избиране на външното устройство, но ако не е, използвайте папката за изтегляне по подразбиране.,
Скрипт 1: LaunchAgent за мониторинг на дискове
Първият скрипт, който трябва да направите, е за системния стартер, който се нарича стартиращ агент. За да го създадете, отворете терминала и въведете следната команда (копирайте го и го поставете за простота):
докоснете ~ / Library / LaunchAgents / local.ChangeSafariDownload.plist
Когато това стане, отворете го в TextEdit, като изпълните следната команда:
отворете -e ~ / Library / LaunchAgents / local.ChangeSafariDownload.plist
Сега трябва да имате отворен празен документ TextEdit, така че да копирате следния текст в него и да го запишете, но да го запазите за сега. Ще трябва да промените раздела "FILEPATH", за да промените местоположението на скрипта:
Етикет локален.ПромянаSafariИзтегляне на опашкитеДиректори на часовниците / Програми за томове / usr / bin / osascript ПрограмаАргументи osascript FILEPATH
Когато влезете, този скрипт ще бъде зареден в процеса на стартиране на системата и ще му даде условия и инструкции за изпълнение на основния скрипт за редактиране на предпочитанията на Safari. В този случай на стартера ще бъде казано да гледа директорията / томовете, за да види дали някакви промени се появят в тази директория. Тъй като това е мястото, където са монтирани файловите системи, всеки път, когато устройството е прикачено или отделено от системата, това ще задейства основния скрипт.
Скрипт 2: AppleScript за промяна на настройките
Вторият скрипт е основният, който ще изпълнява всички действия, включително проверка на имената на устройствата, независимо дали са отворени или не, както и всички други условия за промяна на предпочитанията. За да го създадете, отидете в папката / Applications / Utilities / и отворете програмата AppleScript Editor. Ще се отвори празен прозорец на редактора и когато го копира и постави в него следния скрипт:
- Задайте алтернативно име на устройство, което да се използва като папка за изтегляне
настройте dlFolder да преобразуваHome ("/ Тома / файловете за изтегляне")
кажете на приложението "Finder"
ако съществува [ POSIX файл dlFolder] тогава
- Не правете нищо и използвайте папката
още
- Задайте dlFolder за начална директория по подразбиране
настройте dlFolder на (POSIX път от ( път към началната папка като текст )) & "Изтегляния"
край, ако
end tell
- да получите текущия път от сафари plist
настройте currentpath на convertHome ( направете скрипт "по подразбиране прочетете com.apple.Safari DownloadsPath")
- промяна на пътя само ако текущата настройка не съвпада с входния път (има нещо, което трябва да се промени)
if (currentpath като текст ) не е равен на (dlFolder като текст ) тогава
- ако Safari работи, променете настройките чрез предпочитанията на Safari
тогава appIsRunning ("Safari")
- определят най-предното приложение за възстановяване, когато скриптът е направен
Задайте frontApp за път към приложението на предния край като текст
- да копирате пътя на папката за изтегляне към клипборда
настройте клипборда на dlFolder като текст
активирайте приложението "Safari"
кажете на приложението "Системни събития", за да кажете на процеса на кандидатстване "Safari"
- отваряне на предпочитанията или отваряне напред (прозорец 1)
натискане на клавиш ", " чрез {command down}
delay 1 - паузите в показването на прозореца могат да доведат до грешка, така че изчакваме секунда
- Преминете към раздела Общи
натиснете бутона "Общи" на лентата с инструменти 1 на прозореца 1
- Променете местоположението за изтегляне на Други
tell pop up бутона "Запази изтеглените файлове на:" от група 1 от група 1 на прозореца "Общи"
кликване
кликнете в менюто "Друго ..." от меню 1 - три точки е елипса, а не три периода
end tell
- Отворете диалоговия прозорец "Отиди в папката"
натискане на клавиш "g" чрез {shift down, команда надолу}
- Поставете пътя на папката в полето за местоположение
покажи прозореца "Отиди в папката"
натискане на клавиш "v" чрез {command down}
връщане на клавишите
end tell
кликнете върху бутона "Избор" на лист 1 от прозореца "Общи"
- затворете предпочитанията
натискане на клавиш "w" чрез {command down}
end tell
- възстановяване на предното приложение след приключване на работата
кажете приложението frontApp да се активира
още
- ако Safari НЕ се изпълнява, тогава използвайте командата defaults, за да промените предпочитанията
do shell script ("по подразбиране пише com.apple.Safari DownloadsPath" & dlFolder)
край, ако
край, ако
- Функция за преобразуване на препратки към пълен път
за convertHome (текущата пътека)
ако текущата пътека съдържа "~ /" тогава
настройте oldDelimiter на текстовите разделители на AppleScript
задайте разделители за текстови елементи на AppleScript на {"~ /"}
задайте textPath за всеки текстов елемент на текущата пътека
настройте текстовите разделители на AppleScript на oldDelimiter
настройте currentpath на POSIX път ( път към началната папка като текст ) и елемент 2 в textPath
край, ако
връщане на текущата пътека
end convertHome
- Функция за проверка дали се изпълнява приложението "appName" (в този случай се използва за Safari)
на appIsRunning (appName)
кажете приложението "Системни събития" на (име на процесите ) съдържа appName
край appIsRunning
Текстът на скрипта първоначално ще бъде пурпурен, но когато щракнете върху бутона Компилиране на лентата с инструменти или ако запишете скрипта, той ще се оцвети подобно на това, което виждате тук. Запазете скрипта с име като "ChangeDownloads" на избрано от вас място (можете да го поставите в папка "Скриптове" в директорията "Документи" или в потребителската си библиотека) и да затворите редактора на AppleScript.
Сега отворете нов прозорец на терминала и плъзнете новия скриптов файл към него. Когато направите това, пълният път на файла до скрипта ще бъде въведен в прозореца, който ще изглежда нещо като "/Users/username/Documents/ChangeDownloads.scpt." С помощта на мишката изберете целия път на файла, натиснете Command-C, за да го копирате в клипборда, и се върнете към Script 1 в TextEdit и заменете записа "FILEPATH" с копирания текст. След това запазете и затворете документа.
В този момент всички скриптове са настроени. Просто излезте и влезте отново, за да заредите скрипта на стартовия агент (Script 1), а сега, когато монтирате устройство, което се нарича "Downloads", настройките на Safari ще се променят автоматично, така че той използва това устройство като папка за изтегляния. Ако след това изключите устройството, настройката ще бъде отменена. Същото ще се случи и ако преименувате устройството, което ще бъде наречено "Изтегляния", или променете името му от "Изтегляния" на друго.
Имайте предвид, че докато този скрипт работи, той е тестван само на OS X 10.6 "Snow Leopard" и OS X 10.7 "Lion", изпълняващ Safari 5.1; Въпреки това, той трябва да работи добре на други системни конфигурации, изпълняващи поне Safari 5.0. Основните изисквания са, когато скриптът манипулира предпочитанията на Safari от програмата, използва индекси на бутоните, за да отваря различни менюта и да кликне върху различните бутони на екрана. Ако Apple в бъдеще промени организацията на предпочитанията в Safari, тази част от скрипта няма да работи, докато не бъде редактирана, за да сочи отново правилните бутони. Засега обаче това е ограничение, с което ще трябва да се справим. Едно решение за това в Lion е да се възползвате от функцията на Resume на Apple в скрипта, за да излезете от Safari, да направите промените на предпочитанията и след това да рестартирате програмата, вместо да се налага да програмирате интерфейса.
И накрая, ако решите, че вече не искате този скрипт, можете да го деинсталирате, като изтриете файла AppleScript и след това премахнете файла LaunchAgent ръчно или като изпълните следната команда в терминала. Когато това е направено, просто излезте и влезте отново в системата и ще се върнете на първо място:
rm ~ / Library / LaunchAgents / local.ChangeSafariDownload.plist
Оставете Коментар