Gestion Multi-Display en Applescript

novembre 11, 2009

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.

multidisplay.dmg [202 ko]Téléchargez Multidisplay Scripts 1.0
Contient 4 scripts Applescripts pour la gestion des fenêtres en configuration multi-écran.

Voici la liste des programmes :

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.

-- #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.

-- 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.

-- 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.

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

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 ?

Tags : , , , , , , , , , ,