Quickloox

Dal mondo Apple all'universo digitale, in visualizzazione rapida dell'ovvio

21 giu 2008

Mai schermati da AppleScript

Un po’ lungo questo AppleScript, più da capire che ripetere però. Lo ha scritto Jeff Kelley, professionista che spesso deve cambiare risoluzione di schermo e si è stufato di aggiustare in continuazione le finestre su scrivanie sempre diverse. C’è AppleScript, perché faticare più di una volta?

Il modo in cui Jeff sistema le proprie finestre non è detto sia il meglio per tutti. Lo scopo però è capire come ragiona, per modificare lo script secondo come si ragiona noi. Se riusciamo a pensare nel modo giusto per impostare un cambiamento, lo scopo è raggiunto!

Sotto con Script Editor e iniziamo.

tell application “Finder” set risoluzione_schermo to bounds of window of desktop

risoluzione_schermo è una variabile, un contenitore, un cassettino, contenente una lista di quattro elementi che descrivono la risoluzione dello schermo. Se pensiamo al piano cartesiano di vecchia memoria liceale, il primo elemento è l’origine, l’inizio, dell’asse x dell’elemento rispetto allo schermo. Il secondo elemento è l’origine dell’asse y sempre rispetto allo schermo. Il terzo elemento è il numero di pixel orizzontali disponibili e il quarto elemento conta i pixel verticali. Sul mio PowerBook, risoluzione_schermo vale {0,0,1440,900}. Siccome la window of desktop è un caso particolare e non riguarda una finestra, bensì tutto lo schermo, il suo punto di origine è 0 in verticale e in orizzontale (attenzione, liceali: su un Mac l’origine è in alto a sinistra, non in basso a sinistra!), i pixel sono 1.440 in orizzontale e 900 in verticale. Se volessimo una finestra di 500 x 200 pixel situata a 100 pixel dal bordo sinistro e a 150 pixel dal bordo superiore, i suoi quattro elementi sarebbero {100,150,500,200}. All’inizio confonde, però dopo qualche prova diventa tutto molto chiaro. Le piccole magie di Jeff riguardano non tanto posizionare una finestra in un punto fisso dello schermo, che a questo punto dovrebbe essere semplice, quanto posizionarle in modo relativo, per esempio in mezzo allo schermo o roba del genere.

set larghezza_schermo to item 3 of risoluzione_schermo set altezza_schermo to item 4 of risoluzione_schermo end tell

Questi comandi sono conseguenza di quanto appena detto e inseriscono in due variabili diverse due elementi diversi dell’elenco di cui sopra.

tell application “System Events” to tell process “Dock” set dimensioni_dock to size in list 1 set altezza_dock to item 2 of dimensioni_dock end tell

Questa è già piccola magia. Il Dock viene dimensionato in funzione della grandezza del desktop. Non è elegante?

set larghezza_desiderata to 1400

Questa variabile definisce un’area di lavoro che piace a Jeff, dalla quale possono discendere un sacco di conseguenze che stiamo per vedere. Non commento le operazioni aritmetiche che si vedono qui sotto; sono appunto operazioni aritmetiche elementari. Invece è stimolante capire che cosa fanno accadere. Se proprio non battiamo chiodo, lanciamo un altro utente su Mac OS X (così il nostro desktop non si modifica) ed eseguiamo lo script, così vediamo che cosa avviene e possiamo collegarlo alle istruzioni!

set spazio_laterale to larghezza_schermo - larghezza_desiderata set bordo_sinistro to (spazio_laterale / 2) set bordo_destro to bordo_sinistro + larghezza_desiderata set bordo_inferiore to altezza_schermo - altezza_dock set bordo_superiore to 22 (* per la barra dei menu *)

Ecco. E adesso si definiscono le finestre applicazione per applicazione.

try tell application “iTunes” activate set the bounds of the first window to {bordo_sinistro, bordo_superiore, bordo_destro, bordo_inferiore} end tell end try

try tell application “Firefox” activate set the bounds of the first window to {bordo_sinistro, bordo_superiore, bordo_destro, bordo_inferiore} end tell end try

try tell application “Mail” activate set the bounds of the first window to {bordo_sinistro, bordo_superiore, bordo_destro, bordo_inferiore} end tell end try

try tell application “Vienna” activate set the bounds of the first window to {bordo_sinistro, bordo_superiore, bordo_destro, bordo_inferiore} end tell end try

Eccetera eccetera. Le finestre iniziali dei vari programmi sono definite tutte con le stesse dimensioni, ma non sarebbe difficile (ora) impostarle a piacere.

Come di consueto, ora arriva lo script integrale.

tell application “Finder” set risoluzione_schermo to bounds of window of desktop set larghezza_schermo to item 3 of risoluzione_schermo set altezza_schermo to item 4 of risoluzione_schermo end tell

tell application “System Events” to tell process “Dock” set dimensioni_dock to size in list 1 set altezza_dock to item 2 of dimensioni_dock end tell

set larghezza_desiderata to 1400

set spazio_laterale to larghezza_schermo - larghezza_desiderata set bordo_sinistro to (spazio_laterale / 2) set bordo_destro to bordo_sinistro + larghezza_desiderata set bordo_inferiore to altezza_schermo - altezza_dock set bordo_superiore to 22 (* for the menu bar *)

try tell application “iTunes” activate set the bounds of the first window to {bordo_sinistro, bordo_superiore, bordo_destro, bordo_inferiore} end tell end try

try tell application “Firefox” activate set the bounds of the first window to {bordo_sinistro, bordo_superiore, bordo_destro, bordo_inferiore} end tell end try

try tell application “Mail” activate set the bounds of the first window to {bordo_sinistro, bordo_superiore, bordo_destro, bordo_inferiore} end tell end try

try tell application “Vienna” activate set the bounds of the first window to {bordo_sinistro, bordo_superiore, bordo_destro, bordo_inferiore} end tell end try

Commenta