Béton brut

Morduj wszystkich (łącznie z dziećmi) w OS X

2008-09-17

Zamykanie: abuse mlaskania wskaźnikiem kulkowym 1

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.

/bin/bash i co dalej?

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

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](http://www.apple.com/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

Dzięki dla Grześka i Mariuszowi za linki i szybkie porady. :-)

  1. Kto nie wie o co kaman, ten nigdy nie czytał tłumaczeń Jana Bieleckiego