Automatyzacja czynności za pomocą Keyboard Maestro

Poniższy artykuł został napisany i opublikowany 3 lata temu. Istnieje spore prawdopodobieństwo, że część informacji i linków jest już nieaktualna.

Gdy korzystam z komputera, zawsze staram się robić jak najmniej, szukając sposobów na to, by to właśnie on zrobił jak najwięcej. Gdy jakąś czynność muszę powtórzyć choćby dwukrotnie, natychmiast zaczynam się zastanawiać, w jaki sposób mogę to zautomatyzować. Dlatego też, gdy łapię się na tym, że dany fragment tekstu (choćby standardową odpowiedź na mail czy fragment formularza) wpisuję któryś już raz, tworzę skrót w TextExpander, po wpisaniu którego, komputer wyręczy mnie następnym razem. Gdy często wyszukuję informacji na konkretnej stronie, dodaję ją do indeksu aplikacji LaunchBar, żeby pominąć jeden krok w procesie wyszukiwania. Gdy orientuję się, że codziennie przenoszę pliki z Biurka do katalogu Inbox, deleguję to zadanie aplikacji Hazel, żebym już nigdy nie musiał robić tego ręcznie. Gdy potrzebuję dorobić białą ramkę do choćby dziesięciu fotografii, tworzę akcję w Photoshopie, żeby nie robić tego pojedynczo. Mógłbym wymieniać dalej, ale pewnie wiesz, co mam na myśli. Dodatkowo, jestem zagorzałym fanem skrótów klawiszowych – gdy tylko się da, staram się nie odrywać rąk od klawiatury. Problem ze skrótami klawiszowi jednak taki, że są one przypisane do konkretnej aplikacji i – generalnie – wykonują pojedyncze akcje. Istnieje jednak sposób na wyeliminowanie tego problemu – jest nim aplikacja Keyboard Maestro, której opis możliwości mógłby stanowić temat na książkę i nie byłaby to krótka publikacja.

Keyboard Maestro jest narzędziem z rodzaju wielofunkcyjnych scyzoryków – może służyć zarówno do uruchamiania aplikacji, umożliwiając część funkcjonalności aplikacji LaunchBar, potrafi zamieniać skróty na fragmenty tekstu, imitując TextExpander i może zarządzać historią schowka, jak wiele aplikacji, służących tylko do tego. Generalnie stronię od takich i nie polecam narzędzi będących tak rozbudowanymi i starających się służyć tak wielu celom. Prawdopodobnie właśnie dlatego, gdy w 2005 roku po raz pierwszy o niej przeczytałem, uznałem, że nie potrzebuję takiego narzędzia. W tym błędnym przekonaniu żyłem aż do jesieni ubiegłego roku.

Bo choć do uruchamiania aplikacji i zarządzania historią schowka używam aplikacji LaunchBar, a skrótami tekstowymi „zajmuje” się u mnie TextExpander, Keyboard Maestro potrafi coś, czego żadna inna aplikacja nie umożliwia; tworzyć własne makra (czyli zbiory pojedynczych akcji) i przypisywać im skróty klawiszowe, działające (także) poza obrębem danej aplikacji.

Zasada działania Keyboard Maestro jest bardzo prosta – każesz jej wykonać szereg akcji i decydujesz w jaki sposób takie makro ma być inicjowane; czy skrótem klawiszowym, wpisanym tekstem czy nawet czasem (tj. o danej porze lub w określonych odstępach czasu).

W standardowy dla siebie sposób, nie zamierzam jednak dalej opisywać „teorii” ani „recenzować” tej aplikacji – usiadłem do pisania, żeby podzielić się praktycznymi przykładami używania Keyboard Maestro, które stworzyłem lub, na które natrafiłem w ciągu ostatniego roku, po to, byś Ty, Drogi Czytelniku, mógł w łatwy sposób zadecydować czy ta aplikacja jest w stanie „zautomatyzować” Twój proces działań i chociaż w pewnym zakresie ułatwić Ci codziennie wykonywane czynności. Na początek kilka prostych.

Perspektywy w OmniFocus

Jednym z pierwszych makr, jakie zrobiłem, było to, pozwalające mi uruchomić konkretną perspektywę OmniFocus, bez konieczności pamiętania czy aplikacja ta w ogóle jest uruchomiona (domyślnie mam ukryty Dock) lub czy jest aktywna (bo na przypisanie takich skrótów OmniFocus pozwala) – po prostu podchodzę do komputera, naciskam klawisze ⌘+⌥+^+T, żeby wyświetliła mi się perpektywa Today lub ⌘+⌥+^+F, żeby mieć przed oczami perspektywę Flagged. Wyobrażam sobie, że zachęci to pewnie dwóch, maksymalnie trzech czytelników, ale daję głowę, że będą oni zadowoleni z tego rozwiązania.

W kwestii wyjaśnienia; oba makra mieszczą się w Keyboard Maestro w folderze OmniFocus nie tylko ze względów „porządkowych”, ale także ze względu na fakt, że ten folder ma przypisane własny warunek; makra w nim działają we wszystkich aplikacjach z wyjątkiem OmniFocus1.

Klawisze F5 i F6

Użytkownicy zewnętrznej klawiatury bezprzewodowej do stacjonarnych Maków z pewnością zauważyli, że wśród klawiszy funkcyjnych, dwa z nich – F5 i F6 – są domyślnie bezużyteczne. Wcale jednak nie musi tak być. Ja wybrałem sobie dwie najczęściej otwierane lokalizacje w Finderze – katalog z projektami Fabryki Pikseli i Dropbox – i przypisałem je do tych dwóch klawiszy.

Mała rzecz, a cieszy bardzo.

Eliminacja rozproszeń

Gdy robię sobie pięciominutową przerwę w pracy (Pomodoro), często uruchamiam Tweetbota – klienta Twittera, który wprawdzie wyświetla mi listy ze znikomą ilością użytkowników, nadal czasem zdarza mi się spędzić tam więcej niż kilka minut. Potrzebowałem więc rozwiązania, które mi uniemożliwi takie zachowanie. Tak, wiem, że istnieje coś takiego jak silna wola, ale sprawdzałem – nie zawsze działa u mnie tak jak powinna.

Stworzyłem więc proste makro, które po 4 minutach od uruchomienia Tweetbota (sprawdzając wcześniej, czy sam go nie wyłączyłem), wyświetla mi słynne pytanie Merlina Manna, na które nie sposób odpowiedzieć inaczej niż „No”, co momentalnie wyłącza Tweetbota.

Dzięki temu przeglądam Timeline znacznie rzadziej i krócej niż kiedyś, co niesie ze sobą same plusy.

Rozmiar i położenie okna

Używając Safari, zwłaszcza w trakcie projektowania czy testowania stworzonej strony, bardzo często zmieniam rozmiar okna, żeby sprawdzić responsywność projektu. Dla ułatwienia sobie pracy, stworzyłem kilka makr, które same umieszczają okno na środku ekranu i dostosowują jego szerokość. Mam więc makro, imitujące szerokość viewportu (jest polski odpowiednik tego słowa?) iPhone’a, iPada (osobno dla orientacji pionowej i poziomej), a także dwa, których używam po prostu do przeglądania internetu, o różnych szerokościach (1025px i 1281px). Każde z nich działa też, gdy Safari jest w trybie pełnoekranowym. Pozwala mi to na błyskawiczne przełączanie się pomiędzy trybami – każde z nich ma osobny skrót klawiaturowy, który dodatkowo (dzięki umieszczeniu ich w osobnym folderze w Keyboard Maestro) jest ograniczony tylko do aplikacji Safari.

Przydaje się to nie tylko podczas pracy, ale także w trakcie spotkania z klientem, na którym mogę w kilka sekund zaprezentować jak strona będzie wyświetlać się na urządzeniach mobilnych, bez dotknięcia myszy i przesuwania krawędzi okna.

Transmit i ulubione

Od lat, aplikacją „zajmującą się” połączeniami z serwerami FTP jest u mnie Transmit. Mam w nim długą listę ulubionych, z którymi łączę się za każdym razem, dodając nowy reportaż na stronie bolechowscy.pl, czy dodając grafiki do tekstu w Fabryce Pikseli (ci, którzy czytali o aplikacji Hazel, wiedzą, że fotografie do dziennika umieszczają się na serwerze automatycznie). Ponownie, żeby nie robić tego w całości ręcznie, skrótem klawiaturowym uruchamiam poszczególne pozycje z ulubionych.

Keyboard Maestro po prostu uruchamia aplikację i z menu Favorites wybiera ustaloną wcześniej pozycję. W dokładnie ten sam sposób przełączam się pomiędzy katalogami w Lightroom.

Markdown – linki

Pisząc na potrzeby strony, używając składni markdown w Byword mam możliwość zaznaczenia słowa, które ma stać się linkiem i naciśnięcia ⌘+K, co sprawi, że Byword doda odpowiednie nawiasy i tak ustawi karetę, żebym mógł wkleić link i wszystko było gotowe (jakiś czas temu, dzięki Keyboard Maestro dodałem do tego automatyczne wklejanie linku). Bardzo brakowało mi tej funkcji w aplikacji Scrivener, więc …sami się domyślacie.

Żeby to zadziałało, wykorzystuję możliwości zapamiętywania historii schowka w Keyboard Maestro, używając zmiennych CurrentClipboardPastClipboard. Rozszerza to oryginalną funkcjonalność z Byword o automatyczne wklejenie linku. Wystarczy teraz, że mam w schowku link, zaznaczam słowo, które ma do niego prowadzić i naciskam ⌘+K – et voilà.

Lightroom – oznacz na fioletowo

W Lightroom można oznaczać fotografie na kilka sposobów; flagą (oznaczona, nieoznaczona i odrzucona), gwiazdką (od ★ do ★★★★★) i kolorem (jest kilka do wyboru). Z jednym wyjątkiem, każdego z powyższych oznaczeń można dokonać z poziomu klawiatury – wyjątek stanowi oznaczenie kolorem fioletowym, którego często używam.

Keyboard Maestro wypełnia tę lukę.

Nieuśpione dyski zewnętrzne

Obecnie wszystkie dyski zewnętrzne, jakie posiadam to napędy z serii WD MyBook Studio, których oprogramowanie pozwala mi edytować czas, po którym dyski się uśpią (łącznie z opcją ‚nigdy’). Nie zawsze jednak tak było – gdy używałem innych dysków, strasznie drażniło mnie oczekiwanie aż dysk się wybudzi, bo był np. przez 10 minut nieużywany (nawet jeśli opcja ‚Usypiaj dyski’ w System Preferences była wyłączona) i to w sytuacjach, w których – wydawałoby się – system wcale nie potrzebował do niego dostępu, jak chociażby przy próbie dodania załącznika do maila. Było to frustrujące, bo teoretycznie siedziałem przed szybkim komputerem z masą pamięci RAM i szybkimi dyskami, a i tak musiałem czekać kilka sekund, aż któryś z dysków zewnętrznych się rozkręci. Unikałem tego następującym makro:

Co 8 minut, między 6:00 rano a 2:00 w nocy, system używał prostej, unixowej komendy do tworzenia/modyfikacji ukrytego pliku w katalogu głównym każdego z dysków zewnętrznych, nie pozwalając mu się uśpić, a tym samym eliminując te kilkusekundowe czasy oczekiwania. Pewnie nie muszę Wam mówić o ile milej pracowało się przy komputerze.

Zaczęliśmy od prostych zbiorów akcji, czas na nieco bardziej skomplikowane.

Reset

Kolejne użycie nie jest moim pomysłem – podejrzałem je u Bena Brooksa i zaadoptowałem niezwłocznie, bo sprawdza się u mnie wcale niegorzej niż u autora oryginału.

Gdy tylko jest to możliwe, staram się pracować z aplikacjami w trybie pełnoekranowym – czas, w którym wierzyłem w produktywną wielozadaniowość, minął bezpowrotnie. Pozwala mi to skupić się na danym zadaniu. Nadal jednak, zbyt często używam gestu przełączania się między wirtualnymi biurkami, sprawdzając, co się na nich dzieje, co oczywiście, jest nawykiem niepożądanym, który staram się wyeliminować. Poniższe makro bardzo mi w tym pomaga.

Działanie tego makra polega na zamykaniu i uruchamianiu aplikacji – brzmi to banalnie, wiem. Ale w praktyce jest dużo bardziej przydatne. Uruchamiam je skrótem ^+⌥+` (bardzo łatwo jest wcisnąć go na klawiaturze z polskim układem, gdzie klawisz tyldy znajduje się obok lewego shift – tylko ze względu na niego zamieniłem klawiaturę od iPada z tą od komputera), co powoduje wyświetlenie się menu z kilkoma wcześniej utworzonymi opcjami2:

  • default – zamyka wszystkie aplikacje, z wyjątkiem wykluczonych (więcej o tym za moment) – te ukrywa – a następnie uruchamia Mail, OmniFocus, BusyCal (wszystkie trzy domyślnie w trybie pełnoekranowym) oraz Evernote, czeka aż wyświetli się okno Evernote, ukrywa je, ukrywa Mail (na wypadek gdyby nie był włączony w trybie pełnoekranowym) i aktywuje aplikację Finder.
  • Lightroom – zamyka wszystkie aplikacje (z wyjątkiem wykluczonych) i uruchamia Lightroom 4. Z reguły wiem, co powinienem tam zrobić, więc nie potrzebuję do tego ani OmniFocus ani BusyCal.
  • minimal – jak sama nazwa mówi; zamyka wszystkie aplikacje, z wyjątkiem wykluczonych, które z kolei ukrywa.
  • writing – zamyka wszystkie aplikacje (tym razem łącznie z Finderem) i uruchamia jeden z projektów aplikacji Scrivener.

Pierwsze z nich jest wyzwalane nie tylko skrótem klawiaturowym – codziennie o 4:31 rano (dzięki temu, że uruchomiony jest wówczas proces kopii zapasowej w Carbon Copy Cloner, mam pewność, że komputer nie będzie uśpiony) aktywuje się sama, żeby oczyścić „bałagan” (pootwierane dokumenty, uruchomione aplikacje, otwarte okna) powstały w wyniku pracy dnia poprzedniego. Gdy więc rano podchodzę do komputera, ekran wyświetla tylko te aplikacje, które sam bym włączył.

Idea makr Lightroomwriting jest oczywista; w moim przypadku świadomość, że za/pod aplikacją – nawet pełnoekranową – nie mam niczego innego, bardzo pomaga mi skupić się na konkretnym zadaniu; w tym przypadku obróbce fotografii lub pisaniu. Prawdopodobnie z tego samego też powodu tak lubię iPada; wymusza on na użytkowniku wyłączenie „złudnej wielozadaniowości”. Ale to tylko dygresja.

Makro minimal lubię włączać, gdy kończę pracę na dany dzień. Wyłączone wszystkie aplikacje, to sygnał, który odbieram podświadomie, a który zniechęca mnie do powrotu do komputera (co jest istotne, gdy pracuje się w domu).

Wspomniałem też o aplikacjach wykluczonych; jak nietrudno się domyślić, jest to lista aplikacji ignorowanych przez akcję „Quit All Applications”. Dodałem do niej iTunes (z oczywistych powodów) oraz ForkLift i Transmit (pierwszego używam do transferu danych pomiędzy dyskami, drugiego do transferu z lub do serwera, więc nie chciałbym, żeby któryś z tych procesów został przerwany podczas „resetu”).

Nie wiem czy suchy opis tego procesu wskazuje na to, jak bardzo przydatne jest to makro (zwłaszcza, gdy jest uruchamiane na dysku SSD – w czasach „przed-SSD” uruchamiałem default, po czym wychodziłem zrobić sobie poranną kawę; nie chciałem nawet wiedzieć, ile to trwało). Wiem natomiast, że choćby dla tej jednej możliwości będę instalował Keyboard Maestro na każdym kolejnym komputerze, jakiego będę używał.

À propos piątku

Gdy „zbieram” linki do cotygodniowego cyklu à propos piątku, dodaję je do OmniFocus, gdzie trafiają do odpowiedniego projektu, mają nadany kontekst writing, a jako datę początkową ustawiony „czwartek”. Oczywiście, nie wyobrażam sobie, żeby dodawać je ręcznie, nawet poprzez Quick Entry w OmniFocus. Gdy więc jestem na stronie, do której link chciałbym zamieścić w następnym wydaniu, robię, co następuje:

  1. naciskam ⌘+2 – wyświetla się okno Quick Entry z OmniFocus, z już nadanym tytułem zadania („wyciągniętym” z tytułu strony) i linkiem w polu notatek – wszystkim tym zajmuje się Safari i umieszczony na drugiej pozycji w Bookmarks Bar bookmarklet OmniFocus; Keyboard Maestro jeszcze nie brało w tym udziału,
  2. naciskam ⌘+⌥+2 – teraz do akcji wkracza Keyboard Maestro – wyświetla okienko z możliwością dodania opisu. Bez względu na to, czy go wpiszę czy anuluję, makro będzie działać dalej: nada zadaniu projekt à propos, kontekst writing i w polu daty wpisze thu (co OmniFocus automatycznie zamieni na kolejny czwartek lub na dziś, jeśli dodaję to właśnie w czwartek). Jeśli dodałem wcześniej opis, Keyboard Maestro doda go w polu notatek pod linkiem i zapisze zadanie.
  3. Po zapisaniu Keyboard Maestro wróci do ostatnio aktywnej aplikacji (OmniFocus uruchomiony jest w trybie pełnoekranowym, więc po dodaniu zadania, automatycznie przełącza się do przestrzeni z OF)

Pomijając wpisanie opisu, całość zajmuje mniej niż 2 sekundy.

Karty Safari » OmniFocus

Zdarza mi się też używać znakomitego skryptu, napisanego przez Gordona Waddella, którego działanie polega na zapisaniu adresów wszystkich aktualnie otwartych kart w Safari do zadania w OmniFocus.

Przydaje mi się to w dwóch sytuacjach; gdy przeglądam wiele stron jednocześnie, a muszę odejść od komputera lub wyłączyć Safari, zapisuję je do OmniFocus, dzięki czemu wiem, że nie przepadną, oraz w sytuacji gdy klient przysyła mi listę linków (bądź to do stron konkurencji, bądź rzeczy, które mu się podobają) – otwieram je wszystkie w Safari i przenoszę do OmniFocus. W tym przypadku zadaniem Keyboard Maestro jest tylko uruchomienie skryptu i zadbanie o to, by skrót, którym go aktywuję, działał tylko, gdy Safari jest aktywne.

Scrivener – dodawanie stron

Pisząc w aplikacji Scrivener, nierzadko dodaję do niego teksty, będące wynikiem tzw. researchu. Nie podoba mi się jednak to, że wówczas dodany adres jest przez Scrivener interpretowany tak samo, jak przez przeglądarkę, wyświetlając oryginalną stronę ze wszystkimi grafikami, reklamami itp. Keyboard Maestro pozwolił mi to elegancko obejść – wystarczy, że w Safari nacisnę ⌘+⌥+0, żeby sam tekst artykułu trafił do Scrivener. Oto, co się dzieje po wciśnięciu tego skrótu:

  1. Keyboard Maestro naciska za mnie ⌘+6, co aktywuje szóstą w kolejności zakładkę w Safari, która u mnie jest bookmarkletem Instapaper Text, pozwalającym na wyekstrahowanie samego tekstu, bez dodawania go do swojego konta Instapaper (efekt działania jest więc podobny do wbudowanej w Safari opcji Reader).
  2. Makro następnie przechodzi do paska adresu w Safari (⌘+L) i kopiuje (⌘+C) unikalny adres www, stworzony przez Instapaper.
  3. Następnie aktywuje aplikację Scrivener, gdzie importuje ten adres www (⌘+⌥+W), przenosząc kursor do pola nazwy, żebym mógł ją od razu dodać.

Tym samym, zamiast pięciu skrótów klawiaturowych, wystarczy, że nacisnę jeden. Na tym właśnie polega magia Keyboard Maestro.

W ostatnim punkcie mógłbym jeszcze bardziej zautomatyzować dodawanie nazwy, np. poprzez dodanie w tym miejscu tytułu strony, ale łatwiej jest mi się później odnaleźć, gdy wpisuję tam coś swojego.

Tła ekranu

Poniższe makro też nie jest mojego autorstwa, ale ze względu na fakt, że jest ciekawe, nie chciałem go pomijać.

Tło ekranu w systemie, to – wbrew pozorom – bardzo ważna rzecz. Nie tylko przez swoje wizualne właściwości, ale również przez fakt, że – przynajmniej w moim przypadku – potrafi przekazać pewną informację; aktywować pewien stan umysłu. Gdy między otwartymi oknami na ekranie widzę fotografię roweru, wiem, że mój czas na pracę minął.

Dlatego pozwalam Keyboard Maestro zmieniać mi tło ekranu w zależności od godziny – w Dropbox przechowuję cztery tła ekranu (morning, day, afternoon, night), które w odpowiednich porach dnia, zmieniane są automatycznie (choć zmianę mogę również wywołać skrótem klawiaturowym).

Z racji faktu, że skrypt w Keyboard Maestro odwołuje się do konkretnej nazwy pliku, w przypadku gdy chcę zmienić sobie np. poranne tło ekranu, zastępuję tylko pliki w Dropbox, bez ingerencji w skrypt.

→ pobierz wszystkie makra

Podsumowanie

Powyższy zestaw makr nie prezentuje wszystkich, które używam, ale daje pewien obraz tego, do czego Keyboard Maestro może służyć. Czasem buduję też makra do konkretnego projektu, jak chociażby wczoraj w Adobe Premiere Pro, gdzie dla konkretnego efektu nakładałem na siebie 37 warstw (plików graficznych) i musiałbym zmieniać długość trwania każdej z nich osobno. Dzięki Keyboard Maestro nie musiałem.

Zdaję sobie jednak sprawę z tego, że nie jest to aplikacja dla każdego – typowy użytkownik Maka prawodopodobnie nie dostrzeże w niej wartości, ale też nie do niego kierowany był powyższy tekst.

À propos wartości; według dzisiejszego kursu, Keyboard Maestro kosztuje 121,83 zł. Nie wiem, jak Wy cenicie swój czas, ale to, ile ja zaoszczędziłem dzięki tej aplikacji, warte jest dla mnie znacznie więcej niż powyższa kwota.

[Aktualizacja 2012.11.12]

Podejrzałem ostatnio, że Twitterianie rozmawiali o sposobach dodawania przychodzących wiadomości e-mail do swojej listy zadań. Często zdarza się przecież tak, że e-mail jest albo zleceniem, albo wyjaśnieniem zadania do wykonania, albo zawiera inne ważne informacje, dotyczące jakiegoś projektu, więc nic dziwnego, że chciałoby się go w łatwy sposób umieścić na liście zadań.

Daniel Światły opisał u siebie prosty sposób na wykonanie tego, gdy do wspomnianej listy zadań korzysta się z systemowej aplikacji Reminders. Z racji faktu, że sam polecałem swoje rozwiązanie – bazujące na systemowym Mailu i OmniFocus – znajomemu, zawrę je też tutaj. Prawdopodobnie jeszcze jakiejś jednej, może dwóm osobom się to przyda.

W gotowym rozwiązaniu, wystarczy oflagować (u mnie ^F) wiadomość, która ma trafić do OmniFocus – resztą zajmuje się skrypt napisany przez Huntera Hillegasa – można go oczywiście w łatwy sposób zmodyfikować, żeby sam dodawał np. datę początkową czy końcową zadania (ale należy mieć na uwadze, że wtedy będzie się tyczyło to wszystkich wiadomości) albo, żeby nie odznaczał oflagowanych zadań.

W moim przypadku, Keyboard Maestro jest ustawiony w taki sposób, żeby codziennie, między 6:30 rano a 1:00 w nocy, co minutę, sprawdzał czy Mail.app jest uruchomiony. Jeśli jest, uruchamia skrypt, a jeśli nie – nie robi nic (można w tym miejscu zrobić tak, żeby uruchamiał Maila, ale mi zależy właśnie na tym, że skoro jest wyłączony, to jest ku temu jakiś powód):

Jedyne, co muszę zrobić ręcznie, to zarchiwizować taką wiadomość, gdy już pojawi się w OmniFocus. Pracuję jednak nad tym, żeby zmodyfikować skrypt (lub makro Keyboard Maestro – choć tu jest trudniej, bo musiałbym bazować na rezultacie działania skryptu, żeby „wydobyć” informację o tym, czy jakaś wiadomość została przeniesiona do OF w ostatniej pętli) w taki sposób, żeby nie tylko odznaczał flagę, ale i od razu archiwizował wiadomość (co jest bardzo proste, gdy ma się tylko jedno konto mailowe, ale nieco bardziej skomplikowane, gdy jest ich kilka).

[Aktualizacja 2012.11.13]

Wśród użytkowników edytora iA Writer znajdują się też tacy, którzy uważają, że wielkość pisma – zwłaszcza w trybie pełnoekranowym – jest zbyt duża. Choć sam się nie zaliczam do tego grona, całkowitym przypadkiem znalazłem sposób na obejście tego problemu, wykorzystując do tego celu aplikację Keyboard Maestro.

Pisząc o swoich makrach dla Keyboard Maestro wspominałem, że wśród dostępnych akcji istnieje możliwość zmiany wielkości aktywnego okna – używam tego w Safari, żeby imitować szerokość różnych mobilnych urządzeń i dzięki temu sprawdzać, jak strona prezentuje się na każdym z nich. Okazuje się, że w ten sam sposób można manipulować rozmiarem aplikacji pełnoekranowej. Zamiast takiego widoku:

można więc uzyskać taki:

lub taki:

z zachowaniem pełnoekranowych właściwości aplikacji (to samo rozwiązanie działa także w pełnoekranowym Safari).

W ostatnim à propos piątku nadmieniłem, że iA Writer posiada trzy poziomy wielkości pisma. Sprawdziłem więc przy jakich szerokościach okna ta wielkość się zmienia i na jej podstawie stworzyłem trzy makra:

  • wąskie (≤804 px)
  • średnie (805-971 px)
  • szerokie (≥972 px)

Przypisałem do nich takie same skróty, jakich używam w Safari – Keyboard Maestro pozwala bowiem filtrować grupy makr pod kątem tego, w jakich aplikacjach są one aktywne.

Kwestię skrótów klawiszowych można rozwiązać w jeszcze inny sposób – żeby nie musieć ich zapamiętywać, można do całej grupy makr przypisać jeden skrót. Po wciśnięciu wybranej kombinacji Keyboard Maestro wyświetli eleganckie menu, z poziomu którego będzie można wybrać żądaną opcję:

Żeby nie odrywać rąk od klawiatury (bo przecież taka jest idea skrótów klawiszowych) wystarczy wcisnąć klawisz z cyfrą odpowiadającą pozycji w menu (nawet jeśli ta cyfra nie zawiera się w nazwie – w przykładzie użyłem ich tylko dlatego, żeby mieć wpływ na kolejność; w przeciwnym razie byłyby ułożone alfabetycznie).

Używając podobnych akcji, stworzyłem dwa proste makra, których rezultat pokazałem już na podobnym zrzucie ekranu w à propos piątku:

Jego zadaniem jest przejście z trybu pełnoekranowego do trybu edycji, w którym okno edytora zajmuje lewą, a podgląd HTML – prawą część ekranu. Keyboard Maestro dba o to, żeby zmieniać wielkość okien oraz umieszczać je w odpowiednich miejscach. Dodatkowo, dzięki temu, że iA Writer zmienia w menu pozycję Enter Full Screen na Exit Full Screen przy przejściu do trybu pełnoekranowego, mogłem wykorzystać tę właściwość do stworzenia warunku w makrach (właśnie poprzez sprawdzenie czy dana pozycja w menu istnieje). Dzięki niemu jedno z nich działa tylko w trybie pełnoekranowym, a drugie tylko, gdy aplikacja działa w normalnym oknie:

Bez tego warunku, można było sobie namieszać wciskając nieodpowiedni skrót w trybie pełnoekranowym. Oczywiście, dla każdej rozdzielczości ekranu należałoby wpisać inne wartości szerokości i wysokości okien w powyższych makrach. Dla ułatwienia, udostępniam swoje do pobrania.

[Aktualizacja 2012.11.19]

Gdy przygotowuję zdjęcia lub zrzuty ekranu do cotygodniowego à propos piątku, z reguły pliki źródłowe są znacznie większe niż te, które potrzebuję do umieszczenia na stronie. Przez pewien czas korzystałem z prostej akcji w Photoshopie, która ładowała wszystkie pliki z danego katalogu, zmniejszała każdy z nich i zapisywała. Rozwiązanie to działało bezproblemowo, ale fakt, że używam tak zaawansowanej aplikacji do tak prostej czynności, nie dawała mi spokoju, zwłaszcza, że Keyboard Maestro od wersji 5.3 obsługuje też podstawowe operacje na plikach graficznych.

Niestrudzony MacDrifter już w dwa dni po premierze nowej wersji opublikował makro, które zmniejsza zaznaczone w Finderze pliki do podanej wielkości z zachowaniem proporcji obrazu źródłowego. Jego działanie jest bardzo proste:

  • Dla każdego z elementów zaznaczonych w Finderze,
  • wczytuje plik do schowka,
  • odczytuje ścieżkę do pliku i zapisuje ją jako zmienną filePath,
  • odczytuje nazwę pliku i zapisuje ją jako zmienną fileBase,
  • odczytuje rozszerzenie pliku i zapisuje je jako zmienną fileExt,
  • pobiera rozmiary zaznaczonego pliku i zapisuje ją jako zmienną temp,
  • sprawdza czy dłuższy bok pliku jest dłuższy niż 600 pikseli i jeśli jest:
  • oblicza mnożnik (dzieląc wartość dłuższego boku przez 600),
  • zmniejsza obraz, dzieląc szerokość i wysokość przez mnożnik (dzięki czemu oryginalne proporcje są zachowane),
  • zapisuje gotowy obraz do pliku, korzystając z wcześniejszych zmiennych: ścieżka/nazwa_pliku.rozszerzenie

Natrafiłem (zresztą nie tylko ja) jednak na dwa problemy z tym makro; przede wszystkim, zdarzało się, że po zaznaczeniu kilku plików i wyzwoleniu makro, omijało ono niektóre z nich – bez żadnej reguły; czasem potrafiło bez problemu zmniejszyć jednorazowo trzydzieści plików, a czasem po zaznaczeniu pięciu, pomniejszał tylko dwa. Prawdopodobnie winny tu jest sam Keyboard Maestro, który pewne akcje wykonuje zbyt szybko. Najczęściej można sobie z tym poradzić dodając np. 0,5 sekundową pauzę, ale nie w tym przypadku. Drugi problem dotyczył zrzutów ekranu – w systemie OS X domyślnie są one zapisywane jako przezroczyste pliki PNG. Powyższe makro działało jednak tylko z plikami JPG – podczas zmniejszania pliku PNG usuwało ono informację o kanale alpha, zastępując ją biały tłem. Z racji faktu, że tło na tej stronie nie jest białe, nie mogłem tego tak zostawić.

Dodałem więc drugą pętlę akcji wykonywalnych oraz – z racji faktu, że chciałem, żeby makro działało zarówno z plikami JPG, jak i PNG (samo je rozpoznając) – dodałem warunek, bazujący na i tak już wcześniej wczytanym rozszerzeniu pliku.

Warunek ten sprawdzany jest w tym samym miejscu, co wielkość pliku – jeśli dłuższy bok ma więcej niż 600 pikseli, a rozszerzeniem jest png, wykonaj następujące akcje – w przeciwnym razie, wykonaj te akcje, natomiast powielony zestaw akcji pomniejszających i zapisujących pliki pozwala upewnić się, że wszystkie pliki wezmą udział w procesie:

Tak działające makro wygląda „na żywo”:


link do wideo

Na filmie widać też, że jeden z dużych plików JPG w pierwszym podejściu został pominięty (plik _mini.jpg miał nadal 7,5 MB), ale sekundę później zostało to automatycznie poprawione.

→ Pobierz makro

[Aktualizacja 2012.11.26]

Posiadam sporą bibliotekę (płytotekę?) iTunes i kilka dysków zewnętrznych. Te dwie rzeczy nie idą ze sobą w parze, gdy wieczorem lub w nocy, we względnej ciszy, chciałoby się posłuchać muzyki.

Pisałem już kiedyś, że używane przeze mnie napędy zewnętrzne nie usypiają się automatycznie, bo niewiele rzeczy drażni mnie bardziej niż czekanie aż dysk się rozkręci, gdy potrzebuję się dostać do jego zasobów. Podczas słuchania muzyki ten szum rozkręconych talerzy skutecznie odbiera przyjemność tej czynności, zwłaszcza, jeśli słuchacz chciałby się pozachwycać mikrodynamiką posiadanego zestawu lub konkretnego nagrania, słuchając późnym wieczorem lub nawet nocą.

Najprostszym sposobem na poradzenie sobie z tym problemem jest odmontowanie nieużywanych na ten czas dysków. Tylko komu chciałoby się to robić każdorazowo?

Z pomocą – oczywiście – przychodzi Keyboard Maestro, w którym stworzyłem makro quiet. Zależało mi na tym, żeby rozwiązać to w możliwie prosty sposób, najlepiej bez używania AppleScript. Udało się. Na samym początku, za pomocą akcji If Then Else, Keyboard Maestro sprawdza czy dysk o podanej nazwie jest zamontowany:

W moim przypadku sprawdza trzy jednocześnie w jednym warunku, bo zawsze montuję lub odmontowuję wszystkie trzy jednocześnie. Nie byłoby jednak problemu z podzieleniem tego na osobne warunki.

Następnie wykonywany jest prosty skrypt, bazujący na kilku podstawowych unixowych komendach, którego zadaniem jest wydobycie systemowej (a nie wyświetlanej) nazwy odmontowywanej partycji:

W pierwszej linii ustala on zmienną dysk, którą do skryptu (jednorazowo) wpisuję ręcznie (to jest nazwa dysku, który chcę odmontować). Następnie ustala zmienną name, która jest systemową nazwą konkretnej partycji. Robi to w następujący sposób:

  • komenda diskutil list “$dysk” wyświetla dysk, na którym znajduje się partycja o nazwie, którą wpisałem jako zmienną dysk:
  • komendą grep “$dysk” wyszukuję na powyższej liście linię, zawierającą poszukiwaną partycję:
  • w tej linii znajduje się bowiem nazwa, którą potrzebujemy wydobyć (na zrzucie jest to disk3s2) – łatwo policzyć, że jest ona wyświetlona w szóstej kolumnie, którą filtruję za pomocą komendy awk ‘{ print $6 }’:

Trzecia linijka skryptu to już wykonanie komendy montowania lub odmontowania konkretnej partycji za pomocą właśnie ustalonej zmiennej $name.

Całe makro wygląda tak:

i jest gotowe do pobrania.

Najbardziej w tym rozwiązaniu – poza oczywistą ciszą – lubię to, że nie muszę ponownie montować tych dysków, idąc spać – Carbon Copy Cloner, który tworzy w nocy kopie zapasowe sam je sobie zamontuje.

[Aktualizacja 2012.11.28]

Ben Brooks – autor strony The Brooks Review – planował wydać książkę na temat użycia Keyboard Maestro w swoim systemie. W międzyczasie zmienił zdanie i udostępnia swój poradnik w formie krótkich artykułów na swojej stronie. Jak dotąd, są to same podstawy, które z pewnością przydadzą się początkującym. Dziś jednak opublikował makro, którego zadaniem jest dodanie aktualnej daty do nazwy zaznaczonego pliku. Żeby to zrobić, oprócz Keyboard Maestro, użył systemowego Automatora, co dość mnie zaskoczyło. Jest bowiem prostszy sposób na osiągnięcie tego samego rezultatu, bazujący na tych samych zmiennych, o których pisałem przy okazji makra do zmniejszania plików graficznych:

Dla wyjaśnienia; makro pobiera ścieżkę do pliku, jego nazwę i rozszerzenie, a następnie – przy ich użyciu – zmienia nazwę pliku, dodając zmienną %ICUDateTime%yyyy_MM_dd% (w której, jak widać, format daty można dowolnie zmieniać).

Rozwiązanie to jest nie tylko prostsze, ale i działa znacznie szybciej (Automator nigdy nie należał do najszybszych narzędzi w systemie OS X).
Pobierz gotowe makro.

[Aktualizacja 2012.11.29]

:)


  1. Chodzi o to, żeby skróty z Keyboard Maestro nie wchodziły w konflikt z tymi z OmniFocus, gdy okno tej aplikacji jest aktywne. 
  2. Keyboard Maestro pozwala bowiem na przypisanie kilku makr do jednego skrótu klawiaturowego, automatycznie tworząc z nich zgrabne menu.