En utilisant mon MacBook Pro, qui se trouve normalement à gauche de mon écran Thunderbolt, et mon écran Thunderbolt, voici comment utiliser hsscreens et AppleScript pour alterner les deux dispositions de manière programmatique en fonction de la disposition actuelle. Le résultat final est une application AppleScript qui, lorsqu'elle est exécutée, bascule simplement d'un arrangement à l'autre. Cette application peut être exécutée de toutes les manières normales dont une autre application peut être exécutée.
Dans l'image ci-dessous, vous voyez le normal y flipped arrangements des écrans et de la barre de menu montrant les relations de différence entre mon MacBook Pro et mon écran Thunderbolt.
Cette application AppleScript, ainsi que l'application hsscreens
Ce fichier exécutable binaire permet de basculer de manière programmatique entre les deux dispositions présentées dans l'image ci-dessus, en déplaçant l'écran du MacBook Pro à droite ou à gauche de l'écran Thunderbolt et en maintenant la barre de menu sur l'écran du MacBook Pro.
A code pour cela, je devais déterminer ce que le arrangement actuel et d'agir en conséquence. Pour ce faire, j'ai utilisé hmscreens -info
dans un terminal deux fois, une fois dans chaque arrangement .
En regardant les informations produites, j'ai vu un élément d'information que je pouvais grep
pour, afin d'établir un drapeau pour basculer contre.
Sortie de hmscreens -info
dans un arrangement normal des affichages :
$ hmscreens -info
Screen ID: 68822100
Size: {1440, 900}
Global Position: {{0, 0}, {1440, 900}}
Color Space: NSCalibratedRGBColorSpace
BitsPerPixel: 32
Resolution(dpi): {144, 144}
Refresh Rate: 0
Uses Quartz Extreme: YES
Screen ID: 68695180
Size: {2560, 1440}
Global Position: {{1440, -540}, {4000, 900}}
Color Space: NSCalibratedRGBColorSpace
BitsPerPixel: 32
Resolution(dpi): {72, 72}
Refresh Rate: 0
Uses Quartz Extreme: YES
$
Sortie de hmscreens -info
dans un arrangement inversé des affichages :
$ hmscreens -info
Screen ID: 68822100
Size: {1440, 900}
Global Position: {{0, 0}, {1440, 900}}
Color Space: NSCalibratedRGBColorSpace
BitsPerPixel: 32
Resolution(dpi): {144, 144}
Refresh Rate: 0
Uses Quartz Extreme: YES
Screen ID: 68695180
Size: {2560, 1440}
Global Position: {{-2560, -540}, {0, 900}}
Color Space: NSCalibratedRGBColorSpace
BitsPerPixel: 32
Resolution(dpi): {72, 72}
Refresh Rate: 0
Uses Quartz Extreme: YES
$
Il était évident, pour moi, que je devais utiliser des informations provenant de Global Position:
pour déterminer ce que le arrangement actuel des affichages étaient. J'ai immédiatement vu -2560
comme unique entre la sortie et un moyen de déterminer la arrangement actuel . Si je grep
ed pour -2560
et je l'ai trouvé alors j'étais dans le arrangement inversé et non le arrangement normal . C'est donc ce que j'ai utilisé pour déterminer le arrangement actuel et ainsi basculer entre les deux arrangements . (Note : -2560
n'était pas la seule chose unique, c'est juste ce sur quoi je me suis concentré en premier et j'ai senti qu'il y avait un moyen facile d'analyser l'information pour définir un drapeau à bascule avec.)
Sauvegarder l'AppleScript code ci-dessous comme une demande et placez une copie de la hmscreens
dans le fichier exécutable binaire de l <appname>.app/Contents/Resources
dossier. De cette façon, l'application, par exemple /Applications/Toggle Displays Arrangements.app
est autonome et ne dépend pas d'une localisation externe de l'entreprise. hmscreens
fichier exécutable binaire.
Évidemment, vous devrez déterminer ce qu'il faut grep
ou utiliser une méthode différente pour définir le drapeau à bascule et modifier le code ci-dessous pour répondre à vos besoins particuliers (s'il s'agit d'un autre cas d'utilisation ou d'un cas d'utilisation différent).
AppleScript code :
set hms to (path to me as text) & "Contents:Resources:hmscreens"
set screenIDs to paragraphs of (do shell script quoted form of POSIX path of hms & " -screenIDs")
if (count of screenIDs) is greater than 1 then
set normalOrentation to "1"
try
set normalOrentation to do shell script quoted form of POSIX path of hms & " -info | grep '\\-2560'"
end try
if normalOrentation is "1" then
set othersPosition to "left"
else
set othersPosition to "right"
end if
set secondScreen to item 1 of screenIDs
do shell script quoted form of POSIX path of hms & " -setMainID " & secondScreen & " -othersStartingPosition " & othersPosition
else
tell me
activate
display dialog "Only one screen is attached to your computer!" buttons {"OK"} default button 1 with icon note
end tell
end if
L'image ci-dessous montre la mise en évidence syntaxique de l'AppleScript code .