À l'aide de mon MacBook Pro, qui se trouve normalement à gauche de mon écran Thunderbolt et de mon écran Thunderbolt, vous expliquerez comment utiliser hsscreens et AppleScript pour basculer les deux arrangements par programme en fonction de la manière dont ils sont organisés. Le résultat final est une application AppleScript qui, une fois exécutée, bascule simplement entre les deux arrangements. Cette application peut être exécutée de la même manière que toute autre application.
Dans l'image ci-dessous, vous voyez les agencements normal et inversé des écrans et de la barre de menus indiquant les différences de relation entre mon MacBook Pro et Thunderbolt Display.
Cette application AppleScript, ainsi que le hsscreens
fichier exécutable binaire, bascule par programme entre les deux arrangements présentés dans l'image ci-dessus, en déplaçant l'affichage du MacBook Pro vers la droite ou vers la gauche de l'affichage Thunderbolt en maintenant la barre des menus sur l'affichage du MacBook Pro.
Pour coder cela, je devais déterminer quelle était la configuration actuelle et agir en conséquence. Pour ce faire, j'ai utilisé hmscreens -info
deux fois dans un terminal, une fois dans chaque arrangement .
En regardant les informations fournies, j'ai vu une information que je pouvais utiliser grep
pour pouvoir définir un drapeau contre lequel basculer.
Sortie de hmscreens -info
dans une disposition normale 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 renversé 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
$
Si cela était évident, je devais utiliser les informations de Global Position:
pour déterminer la disposition actuelle des écrans. J'ai immédiatement vu -2560
comme unique entre la sortie et un moyen de déterminer la disposition actuelle . Si je grep
cherchais -2560
et trouvais cela, j'étais dans un arrangement renversé , pas dans un arrangement normal . C’est donc ce que j’ai utilisé pour déterminer l’ arrangement actuel et basculer ainsi entre les deux arrangements . (Remarque: ce -2560
n'était pas la seule chose unique, c'est juste ce sur quoi je me suis concentré en premier et j'ai trouvé un moyen facile d'analyser les informations pour définir un drapeau à bascule .)
Enregistrez le code AppleScript ci-dessous en tant qu'application et placez une copie du hmscreens
fichier exécutable binaire dans le <appname>.app/Contents/Resources
dossier. Ainsi, l'application, par exemple, /Applications/Toggle Displays Arrangements.app
est autonome et ne dépend pas d'un emplacement externe du hmscreens
fichier exécutable binaire.
Évidemment, vous devrez déterminer quoi faire grep
ou utiliser une méthode différente pour définir le drapeau à bascule et modifier le code ci-dessous en conséquence afin de répondre à vos besoins particuliers (le cas échéant, sinon ce cas d'utilisation ou différent).
Code AppleScript :
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 coloration syntaxique du code AppleScript .
if normalOrentation ...
déclaration . Cela avait juste besoin de couvrir les informations pour le drapeau à bascule . Le code répliqué a été déplacé et défini en dessous.