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 programáticamente en función de cómo se organizan actualmente. 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, puedes ver los arreglos de normal y volteado de las pantallas y de la barra de menú que muestran las relaciones de diferencia entre mi MacBook Pro y Thunderbolt Display.
EstaaplicaciónAppleScript,juntoconelarchivoejecutablebinariohsscreens
,alternaprogramáticamenteentrelosdosarreglosquesemuestranenlaimagendearriba,desplazandolapantalladelaMacBookProaladerechaolaizquierdadelapantallaThunderboltmanteniendolabarrademenúsenlaMacBookPro'sDisplay.
Paracodificaresto,necesitabadeterminarcuáleraelacuerdoactualyluegoactuarenconsecuencia.Parahaceresto,utilicéhmscreens-info
enunaTerminaldosveces,unavezencadaarreglo.
Mirandolainformaciónobtenida,viunainformaciónquepudegrep
para,conelfindeestablecerunflagparaalternar.
Salidadehmscreens-info
enunadisposiciónnormaldelaspantallas:
$ 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 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í, necesitaba usar información de Global Position:
para determinar cuál era la disposición actual de las pantallas. Inmediatamente vi a -2560
como único entre la salida y una forma de determinar la disposición actual . Si grep
ed para -2560
y lo encontró, entonces estaba en el arreglo invertido , no en el arreglo normal . Así que esto es lo que utilicé para determinar la disposición actual y, por lo tanto, alternar entre las dos disposiciones . (Nota: -2560
no fue lo único, fue solo en lo que me enfocé primero y sentí una manera fácil de analizar la información para establecer un toggle flag con).
Guarde el código de AppleScript a continuación como una aplicación y coloque una copia del archivo ejecutable binario hmscreens
dentro de la carpeta <appname>.app/Contents/Resources
. De esta manera la aplicación, por ejemplo. /Applications/Toggle Displays Arrangements.app
es independiente y no depende de una ubicación externa del archivo ejecutable binario hmscreens
.
Obviamente, deberá determinar para qué grep
o utilizar un método diferente para establecer el toggle flag y modificar el código a continuación para adaptarse a su particular necesidades (si no es este caso de uso o un caso de uso diferente).
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
La imagen a continuación muestra el resaltado sintáctico del código de AppleScript.