Usando il mio MacBook Pro, che normalmente si trova a sinistra del mio display Thunderbolt, e il mio display Thunderbolt, quanto segue mostrerà come usare hsscreens e AppleScript per alternare le due disposizioni a livello di codice in base a come è attualmente organizzato. Il risultato finale è un'applicazione AppleScript che, quando viene eseguita, alterna semplicemente avanti e indietro tra i due arrangiamenti. Questa app può essere eseguita in tutti i modi normali in cui è possibile eseguire qualsiasi altra applicazione.
Nell'immagine sottostante, puoi vedere le disposizioni normale e capovolte delle barre dei display e dei menu che mostrano le relazioni di differenza tra il mio MacBook Pro e il display Thunderbolt.
QuestaapplicazioneAppleScript,insiemealfileeseguibilebinariohsscreens
,commutaalivellodiprogrammazionetraleduedisposizionimostratenell'immaginesopra,spostandoloschermodiMacBookProadestraoasinistradeldisplayThunderboltmantenendolabarradeimenusulMacBookPro'sDisplay.
Percodice,avevobisognodideterminarequalefosseladisposizionecorrenteequindiagirediconseguenza.Perfarequestohousatohmscreens-info
inunterminaleduevolte,unavoltamentreinogniaccordo.
Guardandoleinformazioniemessehovistoun'informazionechepotevogrep
per,perimpostareunflagdaattivare.
Outputdihmscreens-info
inunadisposizionenormaledeidisplay:
$ 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
$
Output di hmscreens -info
in un arrangiamento capovolto dei display:
$ 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
$
Se era ovvio, per me, avevo bisogno di usare le informazioni da Global Position:
per determinare quale fosse la disposizione corrente dei Display. Ho visto immediatamente -2560
come univoco tra l'output e un modo per determinare la disposizione corrente . Se ho grep
ed per -2560
e l'ho trovato, mi trovavo nella disposizione capovolto , non nella disposizione normale . Quindi questo è quello che ho usato per determinare la disposizione corrente e quindi passare tra i due arrangiamenti . (Nota: -2560
non era l'unica cosa unica, è solo ciò su cui mi sono concentrato inizialmente e ho sentito un modo semplice per analizzare le informazioni per impostare un toggle flag con.)
Salva il codice AppleScript sotto come un'applicazione e posiziona una copia del file eseguibile binario hmscreens
all'interno della cartella <appname>.app/Contents/Resources
. In questo modo l'app, ad es. /Applications/Toggle Displays Arrangements.app
è autonomo e non dipende da una posizione esterna del file eseguibile binario hmscreens
.
Ovviamente dovrai determinare cosa fare a grep
o usare un metodo diverso per impostare il toggle flag e modificare il codice di seguito di conseguenza per suite tua particolare bisogni (se diverso da questo caso d'uso o da un caso d'uso diverso).
Codice 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'immagine sottostante mostra l'evidenziazione sintattica del codice di AppleScript.