W OS X kilka rzeczy zachowuje się inaczej. Niektóre są wprost genialne, inne znów wchodzą w drogę komuś wychowanemu na innych systemach operacyjnych. Pierwsze na co wpada początkujący użytkownik to zamykanie programów. Ludzie nawykli, że gadget zamykania okna powoduje w większości przypadków wyłączenie programu i zwolnienie dostępnej pamięci.
System Apple chowa oczywiście okno, zamyka projekty związane z aplikacją, ale zostawia kopię programu w pamięci. Coś, czego na początku się nie spodziewamy. Nowicjusz podczas sesji z systemem łatwo może doprowadzić do sytuacji, w której pamięć jest zajęta przez dużą liczbę aplikacji, które zamknął. A przynajmniej myślał, że zamknął.
Programy, pod którymi znajduje się kropka, znajdują się obecnie w pamięci mimo, że możemy ich nie używać.
Oczywiście, wiedziałem o tym przed zakupem Maka i staram się ubijać bezużyteczne programy. Niestety, sesja w pracy powoduje, że muszę ręcznie ubić ok. 7 programów. Strasznie irytujące, zwłaszcza, że należę do ludzi, którzy bardzo ale to bardzo nie lubią sięgać po myszkę i biegać kursorem po ekranie.
Postanowiłem napisać sobie skrypt w Bashu, który pozabija mi programy, które standardowo “zaśmiecają” mi Dock. Sam skrypt jest trywialny i wygląda mniej więcej tak.
#/bin/bash
software=( Preview TextEdit VLC filezilla iTunes )
for name in ${software[@]}
do
killall $name >/dev/null
done
W pierwszej linii definiujemy shell, który wykona skrypt. Potem robimy listę aplikacji, które chcę zabić za jednym podejściem, następnie kręcimy się po tej liście w pętli (lans łord of de dej: iterujemy) i każdy program z listy jest ubijany przez killall. Z konsoli oczywiście działało. Postanowiłem, że większy sens będzie jeśli podepnę całość przez klawisz skrótu.
Spróbowałem preferencji klawiatury i trafiłem na pierwszy zgrzyt. Nie da się zdefiniować skrótu, który odpali skrypt. Utknąłem. Nie zostało nic innego jak instant-mac-help czyli blipowy tag #mac — i oczywiście, jak zwykle, otrzymałem satysfakcjonującą odpowiedź.
AppleScript to język podobny do REXX-a. Wiem, że Wam nic to nie mówi, bo nie mieliście Amigi. Skrótowo: aplikacje dostarczają specjalnych interfaceów do których AppleScript potrafi się odezwać i pobrać informacje. Dzięki kilkulinijkowym skryptom możemy spiąć programy, które normalnie ze sobą nie rozmawiają. Przykładowo prosimy AddressBook.app żeby podała wszystkie wpisy z adresem e-mail w domenie @wp.pl, dane te przekazujemy do interface programu do składu grafiki i mamy automat do generacji listy lamerów.
(W AS możemy pisać też proste aplikacje z UI, ale to nie jest tematem notki, zainteresowani mogą udać się na strony opisujące AppleScript)
Dodatkową zaletą AS jest to, że możemy bez problemu podpiąć taki program pod skrót. Popatrzyłem w dokumentacje i znalazłem sposób na odpalenie skryptu Basha z AS właśnie. Wystarczy odpalić “Edytor Skryptów” i wpisać proste polecenie:
set fileInfo to do shell script "cd ~/opt/; ./clean.sh"
Następnie, co kluczowe dla całego procesu, zapisać skrypt jako aplikację.

Dalej jest już z górki, w preferencjach klawiatury wybieramy “Skróty klawiszowe”, “+”, z “Wszystkie programy” zmieniamy na “Inne” i wybieramy przygotowany program w AS. Definiujemy klawisz skrótu. Od tej pory nasz skrypt-morderca powinien wypełniać swoje zadanie i uwolnić mnie od zamykania Preview.app, który nie wiedzieć czemu ciągle mnie irytuje. ;-)
Dzięki dla Grześka i Mariuszowi za linki i szybkie porady. :-)
« To nie ma bardzo sensu, zwłaszcza pod koniec | Gorliwa katoliczka »
Podobało się? dodaj kanał RSS do swojego czytnika.
Bronikowski.com © Emil Oppeln-Bronikowski <blog@bronikowski.com>
♥ (random bits of love) Piotr Potera
September 17th, 2008 at 20:20
Witam!
A nie mogłeś skorzystać po prostu z lunchera jakiegoś? Np Quicksilver. Tam możesz sobie podpiąć skrypt pod co chcesz.
September 17th, 2008 at 20:24
mogę, ale:
1) nie chcę QS
2) nie ma w tym nerdfunu ;)
September 17th, 2008 at 20:42
nie rozumiem - “Niestety, sesja w pracy powoduje, że muszę ręcznie ubić ok. 7 programów. ” - przecież na każdym innym systemie musiałbyś zrobić to samo… a przyzwyczajenie się do ctrl+q zamiast ctrl+w to chyba nic wielkiego? tzn. rozumiem problem, tylko nie czaję tego wstępu jakoby to w macosx rozwiązanie było megadziwne…
September 17th, 2008 at 20:52
Ale o co kaman? Super wypasiony, wyczesany w ząbek Mac OSX nie usuwan programów z pamięci (cache/bufory - jak to nazwać?) w chwili kiedy zaczyna być jej mało? Czy chodzi tylko o to, że zamykając program przy pomocy knyfla na belce okna nie dochodzi do jego faktycznego usunięcia z pamięci?
September 17th, 2008 at 20:53
@bartosz Co jakiś czas zamykam/gubię na wirtualnych ekranach aplikacje. Potem trzeba je wyciągnąć, japko+shift+q, albo prawy w Docu i zabijac. tą metodą zabijam je bez trosk.
Rozwiązanie w OS X nie jest dziwne, ale męczy mnie naprawianie moich oopssów. ;)
September 17th, 2008 at 22:06
ja zabijam to czego nie potrzebuje skacząc po programach japko+tab i killując japko+q. w ogóle staram się mało klikać myszą nawigacyjnie bo mysz jest wolna
September 17th, 2008 at 22:10
@opi
rozwiązanie kuby więc pewnie by cię ratowało ;)
a od gubienia aplikacji zajebiste jest expose w połączeniu ze spaces… (u mnie działa na rogi ekranu - jeden róg: spaces, drugi: expose i widzę wszystko co mam widoczne). chyba, że mowa o zamkniętych oknach aplikacji / schowanych command+h aplikacjach - wtedy się nie spisuje ;)
September 17th, 2008 at 22:46
Jak sie ma >3GB ramu do przestaje to przeszkadzac :>
September 18th, 2008 at 09:18
Yeah, z 4GB na pracowym sprzęcie aplikacje zamykają mi się przy wylogowywaniu. Inaczej ich nie ruszam po prostu bo i po co? :) Nie ma to jak Photoshop zawsze pod ręką…
Nooo, w domowym mini z marnym 1GB niestety ale cmd+tab i cmd+q rządzą.
Opi, ty jesteś wykształcony i się znasz. Helpnij. Mam questa: chce by iCal co dzień pod koniec roboty zrzucał mi jeden kalendarz (o, Służbowy się nazywa) do pliku i umieszczał to w DropBoxowy katalogu. Najlogiczniej byłoby to zrobić Automatorem i podpiąć pod iCala. Tylko kurna jak to w Automatorze wyklikać czy w innym AS napisać? Any idea? Anybody?
September 19th, 2008 at 05:37
Kombinacyji Japko+Q z alt-tabem nie wyknułem wcześniej — dzięki za hint, Kuba. I tak będę bronił swojego pomysłu jak niepodległości. ;-) Jest szybciej!
Cztery giga, taak. Gdyby Potera nie zepsuł mu podstawki, to może byłyby dwa. A tak czekam, aż się w końcu zepsuje.
September 19th, 2008 at 14:44
nawet nie sądziłem, że od lat pracuję na tak skomplikowanym komputerze… ;-))
October 10th, 2008 at 16:10
Mała poprawka, jeśli pozwolisz:
Wciśnięcie Cmd+W albo kliknięcie na czerwony X zamyka okno, a nie je ukrywa. Ukrywanie (Cmd+H) nie zwalnia pamięci alokowanej w kontrolkach i UI. Zamykanie tak. Wiem, że nie są to niesamowite ilości RAM-u, ale różnica jakaś jest.
No i podobnie jak wyżej Kuba zamykam appy przełączając się Cmd+Tab i nie puszczając Cmd klikam raz po raz Q. :)