AppleScript Fun: Automatycznie zmienia folder plików do pobrania Safari

Podczas gdy różne programy i usługi na komputerze mają zapewniać wygodę, czasami trzeba wykonywać powtarzalne czynności za pomocą różnych narzędzi i programów w systemie. W takich przypadkach użycie narzędzi skryptowych może być wyjątkowo przydatne. W przeciwieństwie do programowania, wykonywanie skryptów polega na pobieraniu zestawu aktualnych narzędzi i narzędzi oraz automatyzowaniu ich interakcji z poleceniami. Na przykład w JavaScript można powiedzieć przeglądarce, aby zmieniła sposób renderowania treści HTML, lub za pomocą Automatora można powiedzieć Finderowi, aby zorganizował pliki w określony sposób.

Niedawno kolega z CNET podszedł do mnie z wyjątkową sytuacją, w której chciał, aby jego komputer Mac automatycznie zmieniał folder pobierania plików przeglądarki Safari na podstawie obecności dysku zewnętrznego. Chodzi o to, aby Safari umieszczał pobrane pliki w domyślnym katalogu pobierania, ale po podłączeniu określonego dysku zewnętrznego (takiego jak pendrive o nazwie "Downloads"), aby system automatycznie przełączał katalog pobierania plików Safari na dysk zewnętrzny, ponieważ ręczne zmienianie go może być uciążliwe.

Niestety, sam Safari nie ma takiej możliwości, ale system OS X ma zasoby, które można w tym celu wykorzystać, a także skryptowanie za pomocą AppleScript do zarządzania aplikacją Safari i niektórymi usługami OS X, skrypty Shell do wykonywania niektórych czynności, które nie wykorzystują interfejs aplikacji i program uruchamiający system tylko do uruchamiania skryptów po podłączeniu dysku.

Początkowo, gdy myślimy o tym problemie, rozwiązanie może wydawać się dość proste, a następujący scenariusz może wydawać się dobrą odpowiedzią:

  1. Skonfiguruj skrypt, aby uruchomić polecenie "defaults write com.apple.Safari DownloadFolder NAME", aby zmienić folder pobranych plików do lokalizacji określonej przez "NAME"
  2. Uruchom ten skrypt za pomocą programu uruchamiającego system tylko po podłączeniu określonego dysku.
  3. Powtórz to za pomocą podobnego polecenia wskazującego inną lokalizację, gdy napęd nie jest już podłączony.

Chociaż to podstawowe podejście może wydawać się rozsądne, nie będzie działać z wielu powodów. Po pierwsze, po uruchomieniu Safari jedynym sposobem zmiany jego preferencji jest sam program. Kiedy program się załaduje, odczyta preferencje do pamięci RAM i zarządza jego ustawieniami, więc jeśli edytujesz plik preferencji używając TextEdit lub polecenia "defaults", jak wspomniano powyżej, nie będzie to miało wpływu na program. Ponadto Safari zapisuje swoje preferencje z powrotem na dysku po wyjściu, co spowoduje nadpisanie wszelkich zmienionych ustawień.

Ponadto, podejście to zakłada, że ​​system ma dostępne zasoby, które będą monitorować obecność określonego napędu i uruchamiać skrypt, gdy tylko będzie on obecny, co nie ma miejsca. System może monitorować, czy dyski są podłączone, ale konieczne będzie dodatkowe skryptowanie w celu określenia nazwy dysku do sprawdzenia po podłączeniu dysku.

Wreszcie, należy wziąć pod uwagę kilka niuansów. Na przykład, ponieważ sama Safari musi zostać użyta do zmiany swoich preferencji podczas działania, spowoduje to, że będzie to najważniejsza aplikacja, gdzie pozostanie, chyba że najpierw skrypt wykryje najważniejszą aplikację i przywróci ją, gdy modyfikacje w Safari są kompletne. Ponadto nie chcesz, aby skrypt działał i używał aktywnego programu, gdy podłączony jest dowolny dysk losowy.

Z tego powodu skrypt musiałby zawierać następujące pięć uwag:

  1. Uruchomić tylko po podłączeniu nowego napędu
  2. Zmień ustawienia tylko wtedy, gdy podłączony jest dysk o nazwie "Pobrane" (lub dowolna nazwa)
  3. Podejmij decyzję o zmianie ustawień, czy Safari jest aktualnie uruchamiany
  4. Zmieniaj ustawienia tylko wtedy, gdy obecna jest nowa żądana lokalizacja pobierania
  5. Mają możliwość przywrócenia najważniejszej aplikacji, jeśli skrypt musi przejść do Safari

Aby wdrożyć te opcje, należy utworzyć dwa skrypty. Pierwsza dotyczy startera systemu "launchd", który byłby używany do monitorowania punktów montowania napędu systemu, aby sprawdzić, czy nowy dysk został podłączony i zamontowany. Jeśli tak, uruchomi skrypt, który sprawdzi nazwę dysku, sprawdzi, czy Safari jest uruchomiony, a następnie zmieni ustawienia Safari, tylko jeśli różnią się one od wybrania dysku zewnętrznego, ale jeśli go nie ma, użyj domyślnego folderu pobierania .

Skrypt 1: LaunchAgent do monitorowania dysków

Pierwszy skrypt, który należy wprowadzić, to program uruchamiający system, który nazywa się Agent uruchamiania. Aby go utworzyć, otwórz Terminal i wpisz następujące polecenie (skopiuj i wklej dla uproszczenia):

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

Gdy to zrobisz, otwórz go w TextEdit, uruchamiając następujące polecenie:

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

Powinieneś teraz otworzyć pusty dokument TextEdit, skopiuj poniższy tekst i zapisz dokument, ale na razie go nie otwieraj. Będziesz musiał zmienić sekcję "FILEPATH", aby zmienić położenie skryptu:

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

Po zalogowaniu się ten skrypt zostanie załadowany do procesu uruchamiania systemu i poda warunki i instrukcje do uruchomienia głównego skryptu do edycji preferencji Safari. W takim przypadku program uruchamiający zostanie poproszony o obejrzenie katalogu / woluminów, aby sprawdzić, czy w tym katalogu występują jakiekolwiek zmiany. Ponieważ jest to miejsce, w którym są montowane systemy plików, za każdym razem, gdy dysk jest podłączony lub odłączony od systemu, spowoduje to uruchomienie głównego skryptu.

Script 2: AppleScript do zmiany ustawień

Drugi skrypt to główny skrypt, który wykona wszystkie czynności, w tym sprawdzanie nazw napędów, niezależnie od tego, czy Safari jest otwarty, i wszelkie inne warunki zmiany preferencji. Aby go utworzyć, przejdź do folderu / Applications / Utilities / i otwórz program AppleScript Editor. Otworzy się puste okno edytora, a kiedy skopiuje i wklei do niego poniższy skrypt:

- Ustaw tutaj alternatywną nazwę dysku, która będzie używana jako folder pobierania

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

powiedz aplikacji "Finder"

jeśli istnieje [ POSIX file dlFolder], to

- Nie rób nic i używaj folderu

jeszcze

- Ustaw dlFolder na domyślny katalog domowy

Ustaw dlFolder na (POSIX ścieżka ( ścieżka do folderu domowego jako tekst )) i "Pobieranie"

Koniec, jeśli

koniec powiedz

- pobierz aktualną ścieżkę z plistu safari

ustaw currentpath na convertHome ( wykonaj skrypt powłoki "defaults read com.apple.Safari DownloadsPath")

- zmienić ścieżkę tylko wtedy, gdy bieżące ustawienie nie pasuje do ścieżki wejściowej (jest coś do zmiany)

jeśli (currentpath jako tekst ) nie jest równe (dlFolder jako tekst ), to

- jeśli Safari działa, zmień ustawienia za pomocą preferencji Safari

jeśli appIsRunning ("Safari") to

- określ pierwszą aplikację do przywrócenia po zakończeniu skryptu

ustaw frontApp na ścieżkę do przedniej aplikacji jako tekst

- skopiuj ścieżkę do folderu pobierania do schowka

ustaw schowek na dlFolder jako tekst

aktywuj aplikację "Safari"

powiedz aplikacji "Zdarzenia systemowe", aby powiedzieć proces aplikacji "Safari"

- otwórz preferencje lub przenieś się do przodu (okno 1)

naciśnięcie klawisza ", " za pomocą klawisza {command down}

opóźnienie 1 - przerwy w wyświetlaniu okna mogą spowodować błąd, więc czekamy sekundę

- Przejdź do zakładki Ogólne

kliknij przycisk "Ogólne" na pasku narzędzi 1 okna 1

- Zmień lokalizację pobierania na Inne

powiedz przycisk pop-up "Zapisz pobrane pliki do:" grupy 1 grupy 1 okna "Ogólne"

Kliknij

kliknij pozycję menu "Inne ..." w menu 1 - trzy kropki to wielokropek, a nie trzy kropki

koniec powiedz

- Otwórz okno dialogowe "przejdź do folderu"

naciśnięcie klawisza "g" za pomocą klawisza {shift down, command down}

- Wklej ścieżkę folderu w polu lokalizacji

powiedz okno "Przejdź do folderu"

naciśnięcie klawisza "v" za pomocą klawisza {command down}

powrót klawisza

koniec powiedz

kliknij przycisk "Wybierz" z arkusza 1 okna "Ogólne"

- zamknij preferencje

naciśnięcie klawisza "w" za pomocą klawisza {command down}

koniec powiedz

- przywrócić pierwszą aplikację po zakończeniu zadania

powiedz aplikacji frontApp, aby aktywować

jeszcze

- jeśli Safari NIE działa, użyj polecenia defaults, aby zmienić preferencje

wykonaj skrypt powłoki ("defaults write com.apple.Safari DownloadsPath" i dlFolder)

Koniec, jeśli

Koniec, jeśli

- Funkcja do konwersji odniesień do ścieżek macierzystych do pełnych ścieżek

na convertHome (currentpath)

jeśli currentpath zawiera "~ /", wtedy

ustaw oldDelimiter na ograniczniki elementów tekstowych AppleScript

ustaw ograniczniki elementów tekstowych AppleScript na {"~ /"}

Ustaw textPath na każdy element tekstowy currentpath

ustaw ograniczniki elementów tekstowych AppleScript na oldDelimiter

ustaw ścieżkę do ścieżki POSIX ( ścieżka do folderu domowego jako tekst ) i pozycję 2 do ścieżki tekstowej

Koniec, jeśli

return currentpath

Koniec convertHome

- Funkcja sprawdzania, czy aplikacja "appName" jest uruchomiona (w tym przypadku używana w Safari)

na appIsRunning (appName)

Powiedz aplikacji "Zdarzenia systemowe" do (nazwa procesów ) zawiera appName

koniec aplikacji

Tekst skryptu będzie początkowo fioletowy, ale po kliknięciu przycisku Kompiluj na pasku narzędzi lub jeśli zapiszesz skrypt, zostanie on pokolorowany podobnie do tego, co tutaj widzisz. Zapisz skrypt pod nazwą "ChangeDownloads" w wybranej lokalizacji (możesz umieścić ją w folderze "Skrypty" w katalogu Dokumenty lub w bibliotece użytkownika) i zamknąć edytor AppleScript.

Teraz otwórz nowe okno terminala i przeciągnij do niego nowo utworzony plik skryptu. Kiedy to zrobisz, pełna ścieżka do skryptu zostanie wprowadzona do okna, które będzie wyglądało jak "/Users/username/Documents/ChangeDownloads.scpt." Za pomocą myszy zaznacz całą ścieżkę pliku, naciśnij Command-C, aby skopiować go do schowka, a następnie wróć do Script 1 w TextEdit i zastąp wpis "FILEPATH" skopiowanym tekstem. Następnie zapisz i zamknij dokument.

W tym momencie wszystkie skrypty są skonfigurowane. Po prostu wyloguj się i zaloguj ponownie, aby załadować skrypt agenta uruchamiania (Skrypt 1), a teraz po podłączeniu dysku o nazwie "Pobrane" ustawienia przeglądarki Safari zostaną zmienione automatycznie, więc używa tego dysku jako folderu pobierania. Jeśli następnie odmontujesz napęd, ustawienie zostanie przywrócone. To samo stanie się również po zmianie nazwy dysku na "Pobrane" lub zmianie jego nazwy z "Pobrane" na coś innego.

Pamiętaj, że chociaż ten skrypt działa, był testowany tylko w systemie OS X 10.6 "Snow Leopard" i OS X 10.7 "Lion" z Safari 5.1; Powinno jednak działać dobrze na innych konfiguracjach systemu działających przynajmniej w Safari 5.0. Głównymi wymaganiami są skrypty manipulujące preferencjami Safari w programie, używają indeksów przycisków do otwierania różnych menu i klikania różnych przycisków na ekranie. Jeśli Apple zmieni organizację preferencji w Safari w przyszłości, ta część skryptu nie będzie działać, dopóki nie zostanie zmieniona, aby ponownie wskazać odpowiednie przyciski. Jednak na razie jest to ograniczenie, z którym będziemy musieli sobie poradzić. Jednym z rozwiązań tego w Lion jest skorzystanie z funkcji CV firmy Apple w skrypcie, aby opuścić Safari, zmienić preferencje, a następnie ponownie uruchomić program, zamiast konieczności programowania interfejsu.

Na koniec, jeśli zdecydujesz, że nie chcesz już tego skryptu, możesz go odinstalować, usuwając plik AppleScript, a następnie usuwając plik LaunchAgent ręcznie lub uruchamiając następujące polecenie w terminalu. Gdy to zrobisz, wyloguj się i zaloguj ponownie, a wrócisz do kwadratu pierwszego:

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


 

Zostaw Swój Komentarz