Usando mi MacBook Pro, que normalmente se encuentra a la izquierda de mi Thunderbolt Display, y mi Thunderbolt Display, lo siguiente mostrará cómo usar hsscreens y AppleScript para alternar los dos arreglos de forma programada en función de la disposición actual. El resultado final es una aplicación AppleScript que, cuando se ejecuta, simplemente alterna entre las dos disposiciones. Esta aplicación se puede ejecutar de todas las formas normales en que se puede ejecutar cualquier otra aplicación.
En la imagen de abajo, se ve el normal y volteado arreglos de la barra de pantallas y menús mostrando las relaciones de diferencia entre mi MacBook Pro y la pantalla Thunderbolt.
Esta aplicación AppleScript, junto con el hsscreens
archivo ejecutable binario, cambia de forma programada entre las dos disposiciones mostradas en la imagen anterior, desplazando la pantalla del MacBook Pro a la derecha o a la izquierda de la pantalla Thunderbolt manteniendo la barra de menús en la pantalla del MacBook Pro.
A código esto, necesitaba determinar lo que el acuerdo actual era y luego actuar en consecuencia. Para ello he utilizado hmscreens -info
en un Terminal dos veces, una mientras en cada acuerdo .
Mirando la información que sale vi un dato que podía grep
ya que, para el conjunto a bandera para cambiar de posición.
Salida de hmscreens -info
en un disposición normal de las pantallas:
$ 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
$
Salida de hmscreens -info
en un disposición invertida de las pantallas:
$ 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 era obvio, para mí, que necesitaba usar información de Global Position:
para determinar lo que el acuerdo actual de los Displays eran. Inmediatamente vi -2560
como única entre la salida y una forma de determinar la acuerdo actual . Si yo grep
n para -2560
y lo encontré entonces estaba en el disposición invertida , no el disposición normal . Así que esto es lo que utilicé para determinar el acuerdo actual y así alternar entre los dos arreglos . (Nota: -2560
no era la única cosa única, sólo es en lo que me centré primero y sentí una manera fácil de analizar la información para establecer un Bandera de cambio con).
Guardar el AppleScript código a continuación como una solicitud y coloque una copia del hmscreens
archivo binario ejecutable dentro del <appname>.app/Contents/Resources
carpeta. De esta manera la aplicación, por ejemplo /Applications/Toggle Displays Arrangements.app
es autónomo y no depende de una ubicación externa del hmscreens
archivo binario ejecutable.
Obviamente, tendrá que determinar qué grep
o utilizar un método diferente para establecer el Bandera de cambio y modificar el código a continuación para satisfacer sus necesidades particulares (si es otro caso de uso o un caso de uso diferente).
AppleScript código :
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
La siguiente imagen muestra el resaltado sintáctico del AppleScript código .