Benvenuto Visitatore ( Log In | Registrati )
![]() ![]() |
30 Jan 2008, 01:06
Messaggio
#1
|
|
|
Ho spesso la necessità di affiancare due finestre occupando tutto lo schermo o espanderne una sola sempre alle dimensioni massime dello schermo. Visto che sistema e applicazioni di solito non vengono in aiuto, ho cercato in giro e ho trovato script già pronti da far partire tramite Quicksilver o similari che però non mi va di installare solo per questo utilizzo.
Allora, rastrellando qua e là , ho messo su questi arnesi che sembrano fare il loro mestiere (su Tiger e ovviamente solo per le applicazioni scriptabili). CITAZIONE -- AFFIANCA FINESTRE -- le prime due finestre della prima applicazione vengono affiancate -- ogni finestra occuperà metà schermo -- se esiste una sola finestra, questa occuperà la metà sinistra dello schermo -- (ovviamente) funziona solo con applicazioni scriptabili -- Script Editor 2.1.1 -- AppleScript 1.10.7 -- Mac OS X 10.4.11 tell application "System Events"      set visible of first application process whose frontmost is true to false      set myFrontMost to name of first item of (processes whose frontmost is true) end tell tell application "Finder"      set menubarHeight to 22      set screenBounds to bounds of window of desktop      set screenWidth to item 3 of screenBounds      set screenHeight to item 4 of screenBounds      {screenWidth, screenHeight}      if (myFrontMost is equal to "Finder" or myFrontMost is equal to "Microsoft Entourage") then           set menubarHeight to 44      end if      if (myFrontMost is equal to "Microsoft Excel") then           set menubarHeight to 55      end if end tell try      tell application myFrontMost           set bounds of window 1 to {0, menubarHeight, (screenWidth / 2), screenHeight}           set bounds of window 2 to {(screenWidth / 2), menubarHeight, screenWidth, screenHeight}           activate      end tell end try CITAZIONE -- MASSIMIZZA FINESTRA -- la prima finestra della prima applicazione viene massimizzata -- la finestra occuperà tutto lo schermo -- (ovviamente) funziona solo con applicazioni scriptabili -- Script Editor 2.1.1 -- AppleScript 1.10.7 -- Mac OS X 10.4.11 tell application "System Events"      set visible of first application process whose frontmost is true to false      set myFrontMost to name of first item of (processes whose frontmost is true) end tell tell application "Finder"      set menubarHeight to 22      set screenBounds to bounds of window of desktop      set screenWidth to item 3 of screenBounds      set screenHeight to item 4 of screenBounds      {screenWidth, screenHeight}      if (myFrontMost is equal to "Finder" or myFrontMost is equal to "Microsoft Entourage") then           set menubarHeight to 44      end if      if (myFrontMost is equal to "Microsoft Excel") then           set menubarHeight to 55      end if end tell try      tell application myFrontMost           set bounds of window 1 to {0, menubarHeight, screenWidth, screenHeight}           activate      end tell end try ------------------------- [This script was automatically tagged for color coded syntax by Convert Script to Markup Code] Ora la prima domanda è: non esiste un sistema più lineare o elegante per operare sulla frontmost application che non sia il far girare uno script (che diventa la prima applicazione), farlo nascondere e riprendere la frontmost? Mi chiedo anche come mai i vari script che ho trovato, fatti girare da Quicksilver o simili, dovrebbero invece puntare direttamente sulla vera applicazione attiva... Inizialmente avevo provato invece a prendere la lista delle applicazioni correnti tramite application processes sperando che venisse fuori una lista ordinata in qualche maniera e dalla quale potessi poi pescare la seconda se la prima era lo script. Ma questa lista mi viene fuori sempre in un ordine incomprensibile, anche a filtrarla per "visible is true" o "scripting terminology is true"... Ovvero: CITAZIONE tell application "Finder"      name of processes whose has scripting terminology is true and visible is true end tell E qui la seconda domanda: in che ordine viene prodotta questa lista? Con AppleScript, come è possibile avere la lista delle applicazioni nell'ordine in cui sono effettivamente impilate? Avevo anche pensato a passare il keystroke di cmd-Tab con System Events ma mi pareva blasfemo... Ah, ovviamente c'è la domanda numero zero: ma può essere che per un compito così banale non esistano soluzioni più semplici?? Inutile dire che si accettano commenti sugli script sopra e risposte alle domande sotto. Saluti, Giulio |
|
|
|
|
|
|
|
31 Jan 2008, 01:48
Messaggio
#2
|
|
|
Ora la prima domanda è: non esiste un sistema più lineare o elegante per operare sulla frontmost application che non sia il far girare uno script (che diventa la prima applicazione), farlo nascondere e riprendere la frontmost? Mi chiedo anche come mai i vari script che ho trovato, fatti girare da Quicksilver o simili, dovrebbero invece puntare direttamente sulla vera applicazione attiva... Se nel tuo script usi dei comandi per interagire direttamente con l'interfaccia grafica (il cosiddetto GUI scripting, la maniera peggiore di scrivere uno script, da usare solo come ultima spiaggia) non hai alternative. Se invece l'applicazione è direttamente scriptabile, puoi direttamente inviare i comandi con il costrutto CODICE tell application "appname" -- fai qualcosa end Inizialmente avevo provato invece a prendere la lista delle applicazioni correnti tramite application processes sperando che venisse fuori una lista ordinata in qualche maniera e dalla quale potessi poi pescare la seconda se la prima era lo script. Ma questa lista mi viene fuori sempre in un ordine incomprensibile, anche a filtrarla per "visible is true" o "scripting terminology is true"... Ovvero: La lista mi pare ordinata per id o unix id.CITAZIONE tell application "Finder" name of processes whose has scripting terminology is true and visible is true end tell E qui la seconda domanda: in che ordine viene prodotta questa lista? Con AppleScript, come è possibile avere la lista delle applicazioni nell'ordine in cui sono effettivamente impilate? Avevo anche pensato a passare il keystroke di cmd-Tab con System Events ma mi pareva blasfemo... Ah, ovviamente c'è la domanda numero zero: ma può essere che per un compito così banale non esistano soluzioni più semplici?? Se l'applicazione da pilotare non offre un supporto diretto, ci si ritrova in situazioni scomode.Ciao Paolo -------------------- |
|
|
|
|
31 Jan 2008, 02:03
Messaggio
#3
|
|
|
La lista mi pare ordinata per id o unix id. Non ci avevo pensato. Ripeto che mi pare veramente incredibile che via AppleScript non si possa tirar fuori la lista di applicazioni correnti nel loro ordine corrente... Mi pare di capire quindi che per uno script del genere non esistano approcci o metodi molto più eleganti di questo, vero? E va pure considerato che questo funziona solo e ovviamente con applicazioni scriptabili. Saluti, Giulio |
|
|
|
|
1 Feb 2008, 02:16
Messaggio
#4
|
|
|
Ripeto che mi pare veramente incredibile che via AppleScript non si possa tirar fuori la lista di applicazioni correnti nel loro ordine corrente... Pensandoci bene, la domanda parte da una supposizione falsa. Non esiste un ordine delle applicazioni perché in Mac OS X le finestre sono sovrapposte indipendentemente. Ad esempio puoi avere nell'ordine una finestra di Safari, una di Mail e un'altra di Safari.Mi pare di capire quindi che per uno script del genere non esistano approcci o metodi molto più eleganti di questo, vero? E va pure considerato che questo funziona solo e ovviamente con applicazioni scriptabili. Il GUI Scripting funziona con qualunque applicazione nativa per Mac OS X (non ho provato con X11).Ciao Paolo -------------------- |
|
|
|
|
1 Feb 2008, 10:10
Messaggio
#5
|
|
|
Non esiste un ordine delle applicazioni perché in Mac OS X le finestre sono sovrapposte indipendentemente. Ad esempio puoi avere nell'ordine una finestra di Safari, una di Mail e un'altra di Safari. Ma, detto con parole mie, se io faccio cmd-Tab il sistema mi propone una serie di applicazioni in un determinato ordine dipendente dalle mie ultime operazioni. A quell'ordine io vorrei accedere tramite AppleScript. Non è possibile? Ho trovato in giro che altrimenti ci si dovrebbe arrivare, come scritto sopra, passando appunto i keystroke di cmd-Tab con System Events ma in teoria mi pareva un sistema ancora più arzigogolato. Il GUI Scripting funziona con qualunque applicazione nativa per Mac OS X (non ho provato con X11). Già , mi iniziava a suonare come un'altra cosa da studiare... Grazie, Giulio |
|
|
|
|
2 Feb 2008, 22:52
Messaggio
#6
|
|
|
Non esiste un ordine delle applicazioni perché in Mac OS X le finestre sono sovrapposte indipendentemente. Ad esempio puoi avere nell'ordine una finestra di Safari, una di Mail e un'altra di Safari. Ma, detto con parole mie, se io faccio cmd-Tab il sistema mi propone una serie di applicazioni in un determinato ordine dipendente dalle mie ultime operazioni. A quell'ordine io vorrei accedere tramite AppleScript. Non è possibile? Ho trovato in giro che altrimenti ci si dovrebbe arrivare, come scritto sopra, passando appunto i keystroke di cmd-Tab con System Events ma in teoria mi pareva un sistema ancora più arzigogolato. Ma a cosa ti serve esattamente questa informazione? Magari troviamo un'altra strada per ottenere lo stesso risultato. Ciao Paolo -------------------- |
|
|
|
|
2 Feb 2008, 23:23
Messaggio
#7
|
|
|
Ma a cosa ti serve esattamente questa informazione? Magari troviamo un'altra strada per ottenere lo stesso risultato. Il punto è che, quando facevo girare gli script per "fare cose" alle finestre della prima applicazione attiva, proprio lo script diventava la frontmost application ed allora ho visto che, se si nasconde la frontmost e poi la si richiama (come nei miei script sopra), questa è proprio l'applicazione che fino a quel momento era "in cima". L'unico altro sistema che mi veniva in mente, che però non ho sperimentato, era il passare il keystroke del cmd-Tab per raggiungere l'applicazione che fino a quel momento era la prima. La parte curiosa, e che veramente non capisco, è che tutti gli script trovati in rete per "fare cose" alle finestre di un'applicazione, prevedono che siano fatti partire da robe come Quicksilver (che non vorrei installare solo per questo scopo). Allora mi chiedo: perché a farli partire da Quicksilver dovrebbe essere diverso? Non si avrebbe ugualmente il problema dello script che diventa la prima applicazione una volta che inizia a girare? In altre parole, tu come faresti a chiamare la prima applicazione attiva per fargli fare cose tipo sistemare le finestre o altro? Tra l'altro mi pare proprio che non si riesca a selezionare uno script tramite Preferenze di Sistema > Tastiera e Mouse > Abbreviazioni da tastiera. Ma d'altra parte ho realizzato che una soluzione a questo possa essere l'impostare una qualche funzione di un mouse programmabile tipo Macally, ad esempio il tasto-rotella. Spero di essermi spiegato Saluti, Giulio |
|
|
|
|
3 Feb 2008, 02:35
Messaggio
#8
|
|
|
Se usi il GUI scripting (come hai fatto già nei tuoi script) sei limitato a fare quello che faresti normalmente con tastiera e mouse.
Se invece comandi un'applicazione scriptabile, puoi inviare i comandi anche senza farla andare in primo piano (dipende sempre dall'applicazione). Vedi lo script della discussione precedente. Ciao Paolo -------------------- |
|
|
|
|
3 Feb 2008, 02:49
Messaggio
#9
|
|
|
Continua a sfuggirmi qualcosa.
Il mio scopo era creare uno script che andasse a sistemare le finestre della prima applicazione corrente (quindi senza sapere in anticipo quale fosse ovvero se fosse scriptabile o meno). Ovvero sto lavorando nell'applicazione X, ho le finestre impapocchiate, chiamo il mio script dal menù script e questo le sistema come dico io. Quale dovrebbe essere il sistema più pulito o logico per farlo? Io appunto pensavo al comando frontmost che però sono costretto ad usare solo dopo un CODICE set visible of first application process whose frontmost is true to false C'è modo di non usare il GUI scripting in un caso simile?Gli script della discussione precedente si riferiscono al Finder ovvero già sanno cosa andare a comandare... come detto: continua a sfuggirmi qualcosa. Ciao, Giulio |
|
|
|
|
3 Feb 2008, 13:20
Messaggio
#10
|
|
|
E' curioso: i processi ritornati da System Events sono elencati, come scrive Paolo, in ordine dell'ID mentre non si capisce proprio con quale criterio vengano visualizzati nel Finder quando si preme Mela+Tab:
![]() Se il tuo problema fosse solo togliere dai piedi il processo "Script Editor" per poter lavorare con le finestre degli altri programmi questo sarebbe facilmente fatibile filtrando la lista dei processi ed omettendo, appunto, Script Editor (o qualsiasi altro processo che non ti interessa). Ma mi sembra di capire che ti serve proprio il programma che sta "sotto" allo Script Editor e che purtroppo non è per forza identico al processo seguente di System Events. Stando le cose così credo l'unica soluzione sia chiudere tutte le applicazioni che non vuoi vedere prima di lanciare i tuoi script. Buon scripting Farid -------------------- Abends lustig, morgens triste
das ist Leben von Artiste |
|
|
|
|
3 Feb 2008, 19:35
Messaggio
#11
|
|
|
E' curioso: i processi ritornati da System Events sono elencati, come scrive Paolo, in ordine dell'ID mentre non si capisce proprio con quale criterio vengano visualizzati nel Finder quando si preme Mela+Tab: Ma, scusa, io questi li ho sempre interpretati come una vera e propria pila di cose dove, quando ne prendi una nuova, questa va in cima e, quando la nascondi, finisce sotto a tutto... troppo riduttivo? Stando le cose così credo l'unica soluzione sia chiudere tutte le applicazioni che non vuoi vedere prima di lanciare i tuoi script. Credo che non ci siamo capiti:non devo far sparire Script Editor ma lo script (applicazione) che faccio girare per sistemare le finestre alla prima applicazione attiva. Fare piazza pulita di tutte le altre applicazioni non mi pare un'opzione. Comunque gli script elencati sopra funzionano egregiamente e mi stavo solo chiedendo se fosse questo l'approccio corretto. Come dicevo, ho visto spesso usare il comando frontmost ma nella mia esperienza questo mi va a pescare lo script che gira a meno che non lo nascondo prima. Saluti, Giulio |
|
|
|
|
3 Feb 2008, 23:59
Messaggio
#12
|
|
|
Il mio scopo era creare uno script che andasse a sistemare le finestre della prima applicazione corrente (quindi senza sapere in anticipo quale fosse ovvero se fosse scriptabile o meno). Ovvero sto lavorando nell'applicazione X, ho le finestre impapocchiate, chiamo il mio script dal menù script e questo le sistema come dico io. No. Se l'applicazione non è scriptabile non hai scelta.Quale dovrebbe essere il sistema più pulito o logico per farlo? Io appunto pensavo al comando frontmost che però sono costretto ad usare solo dopo un CODICE set visible of first application process whose frontmost is true to false C'è modo di non usare il GUI scripting in un caso simile?Ma il tuo script lo salvi come applicazione o come script? E' curioso: i processi ritornati da System Events sono elencati, come scrive Paolo, in ordine dell'ID mentre non si capisce proprio con quale criterio vengano visualizzati nel Finder quando si preme Mela+Tab: Ma, scusa, io questi li ho sempre interpretati come una vera e propria pila di cose dove, quando ne prendi una nuova, questa va in cima e, quando la nascondi, finisce sotto a tutto... troppo riduttivo?Ciao Paolo -------------------- |
|
|
|
|
4 Feb 2008, 10:12
Messaggio
#13
|
|
|
No. Se l'applicazione non è scriptabile non hai scelta. Temevo. Ma allora questo sistema dovrebbe funzionare anche con Firefox, ad esempio, ovvero con applicazioni non scriptabili? Qui invece i miei script per risistemare le finestre non fanno niente con Firefox... (sì, ho attivato il GUI Scripting dalla Utility AppleScript e sono su Tiger). Ma il tuo script lo salvi come applicazione o come script? Come applicazione nella cartella scripts della libreria o dell'utente (che sono io) e, come dicevo, lo chiamo dal menù Script nella barra dei menù. Sembra anche a me una coda con politica FCFS. Ecco, questa è una maniera elegante per dirlo Ciao, Giulio |