Gestion Multi-Display en Applescript

Afin de travailler plus aisément et plus rapidement en configuration multi-écran, j’ai pris le temps d’écrire quelques scripts en langage Applescript. J’ai décidé de les partager sur ce blog, j’ai par conséquent adapté les programmes afin de pouvoir les distribuer.
Ces scripts ont été réalisés pour une configuration ou le moniteur principal est en face et le moniteur secondaire sur la gauche. Si vous avez une autre configuration, il vous faudra les adapter.

Pour utiliser les raccourcis claviers (exemple : +1) pour lancer les scripts et déplacer les fenêtres, vous pouvez utiliser FastScripts ou Spark.
Pour ma part j’ai associé ces scripts aux boutons additionnels de la souris.

Important : il faut activer l’accès aux périphériques d’aide dans les préférences «Accès universel» de Mac OSX.

MultiScreen Move

Programme actionscript qui permet de déplacer la fenêtre active sur le second moniteur en adaptant la largeur et la hauteur. Si la fenêtre est sur le second moniteur, le script la repositionne sur l’écran principal.
Vous pouvez utiliser ce programme pour déplacer les fenêtres des programmes de messagerie instantanée, si la fenêtre est trop haute, elle sera diminuée.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
-- #Diminution# est la valeur à soustraire aux dimensions de la fenêtre
set diminution to 50

-- Largeur & Hauteur du second moniteur
set screen2_width to 1360
set screen2_height to 768

-- Si comme moi vous avez un second moniteur plus petit, entrez ici le décalage Y par rapport au moniteur principal
set screen2_Yoffset to 68

-- Calcul de la position finale sur le second moniteur
set screen2_pos to {-screen2_width + (diminution / 2), (diminution / 2) + screen2_Yoffset}

-- Entrez ici la position de retour de la fenêtre sur l'écran principal
set screen1_pos to {200, 100}

tell application "System Events"
set FrontApplication to (get name of every process whose frontmost is true) as string
tell process FrontApplication

set {winWidth, winHeight} to size of front window
set {winX, winY} to position of front window

if (winX < 0) then -- déplace la fenêtre située sur l'écran 2 > sur l'écran principal
set position of window 1 to screen1_pos
else
if (winWidth > screen2_width - diminution) then
-- Diminue la largeur
set size of window 1 to {screen2_width - diminution, winHeight}
set winWidth to (screen2_width - diminution)
end if
if (winHeight > screen2_height - diminution) then
-- Diminue la hauteur
set size of window 1 to {winWidth, screen2_height - diminution}
end if

set position of window 1 to screen2_pos
end if
end tell
end tell

Move Full Screen

Programme actionscript qui permet de déplacer la fenêtre active sur le second moniteur en plein écran. Si la fenêtre est déjà sur le second moniteur, le script la repositionne sur l’écran principal.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
-- Position sur l'écran Principal
set screen1_pos to {200, 0}
set screen1_size to {1200, 1050}

-- Position sur l'écran secondaire (FullScreen)
set screen2_pos to {-1360, 68}
set screen2_size to {1360, 768}

tell application "System Events"
set FrontApplication to (get name of every process whose frontmost is true) as string
tell process FrontApplication

-- verifie la position de la fenêtre
set {winX, winY} to position of front window

if (winX < 0) then
--move/return to principal screen 1
set position of window 1 to screen1_pos
set size of window 1 to screen1_size
else
--fullscreen screen 2
set position of window 1 to screen2_pos
set size of window 1 to screen2_size
end if
end tell
end tell

MultiScreen Split 2 Finder Window

Programme actionscript qui permet de créer et d’ouvir deux fenêtres du Finder en mode liste et de les positionner côte à côte sur le second moniteur.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
-- Largeur & Hauteur du second moniteur
set screen2_width to 1360
set screen2_height to 768

-- Si comme moi vous avez un second moniteur plus petit, entrez ici le décalage Y par rapport au moniteur principal
set screen2_Yoffset to 68

-- Dossiers initiaux
set workingFolder1 to "WD320:travaux"
set workingFolder2 to "WD320:travaux"

tell application "Finder"
set windowNumber to 1

set Window1 to make new Finder window
set target of Window1 to workingFolder2

set Window2 to make new Finder window
set target of Window2 to workingFolder1

--Configuration de l'affichage des deux fenêtres
repeat 2 times
activate
tell window windowNumber
set current view to list view
set toolbar visible to true
set sidebar width to 0
end tell
set windowNumber to windowNumber + 1
end repeat

end tell

--Déplacement des 2 fenêtres du Finder sur le deuxieme écran
tell application "System Events"
set FrontApplication to (get name of every process whose frontmost is true) as string
tell process FrontApplication
set position of window 1 to {-screen2_width, screen2_Yoffset}
set size of window 1 to {screen2_width / 2, screen2_height}

set position of window 2 to {-screen2_width / 2, screen2_Yoffset}
set size of window 2 to {screen2_width / 2, screen2_height}
end tell
end tell

Position de la fenêtre active

Utilitaire qui permet d’obtenir la position de la fenêtre (offset). Pour cela, positionnez la fenêtre sur le second moniteur en plein écran et lancer ce script depuis le menu, vous devriez obtenir la position de celle-ci, ce qui vous permettra de configurer les autres programmes.

1
2
3
4
5
tell application "System Events"
set theWindow to window 1 of (first process whose frontmost is true)
set thePosition to position of theWindow
display alert name of theWindow & " : " & ((first item of thePosition) as string) & ", " & ((second item of thePosition) as string)
end tell



English Flag
I share today some simple, but useful applescript to interact with windows on Mac OSX and multi-display configuration. If you search for simple scripts to move windows/programs and switch screen faster, you find it. I write 3 scripts : one to move and reduce the window on the second monitor, one to move and adapt full screen the window, and one who open two Finder windows and positionning them on the second monitor. Others ideas ?